有効桁数


有効数字とか有効桁数とか実はよくわかってないのですが、Jでは1割る3(1%3)とすると、0.333333と表示されます。
まず、これは表示桁数であって、変更できます。

   1 % 3
0.333333
   (9!:11) 20
   1 % 3
0.33333333333333331

解説:Jでは割り算は普通のプログラム言語と違って%を使います。スラッシュ(/)は別の用途で使います。表示桁数は9!:11というコマンドです。20桁にすると17桁目が変で、21桁にするとエラーになる。これで有効数字はこれくらいかと思うとそうでもないことは後述します。

   (9!:11) 21
limit error
(9!:11)21
とりあえず以上の知識で少し実験。
   a =: (10^20) % 3
33333333333333332000
   b =: a + 1
   b
33333333333333332000
   a = b
1
   b =: a + 100000
   a = b
1
   b =: a + 1000000
   a = b
1
   b =: a + 10000000
   a = b
0
   b
33333333333343330000
解説:変数の代入はイコールコロン(=:)です。ローカルに代入するイコールピリオドというのもありますが関数の定義の中でしか使わないのでふつうはイコールコロン(=:)と覚えた方がいいと思います。この辺はグローバル変数をいやがるふつうの言語から来ると違和感を感じるところですね。20桁表記にすると下の方の数字がおかしいし、aとbに代入して小さい数字を足してもa=bの等号で比較するとtrue(1)になってしまいます。最後のやつで13桁目を違えてやっとfalse(0)になるので、まずは有効桁数は13桁くらいかな、思います。 さて、ところが、数日前に19桁の素因数分解をやりましたし、100の階乗とかも一瞬の内にしてしまいますので、とんでもない桁数を扱えるのも事実です。
   q: 9182736455463728191x
23 4093 8779 21649 513239
   !100x
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
ここでミソは数字のうしろについているxでこれがまだよくわかっていない。 x:(エックスコロン)というのもわかっていなくて
   1 % x: 3
1r3
というように使うと有理数(分数)表記されてしまいます。 とかなんとか。 以上