円周率πの近似値1億6千万桁の計算に成功

ジアン角単位系を用いて,円周率πの近似値1億6千万桁の計算することに成功した.計算式履いたってシンプルなもので,

π ~ Im( (-1)^ε )) / ε for extreamly small ε.(ε はジアン角単位系の極めて小さい角度)

を単純に算術演算しているだけだ.Julia には BigFloat という任意長精度の浮動小数点型あるので,実装は容易だ.計算の所要時間は2180秒,36分で.これが速いのか遅いのかはよく分からないが,EXEならもっと速くなることは確かなので,やってみることにしよう.

円周率πの近似値を計算する(続き)

Julia には定数πが「無理数」として備わっている.これは多分,必要に応じて,任意サイズのπが使えるという意味だろう.これを使えば,現在のコードをもう少し改善できる.比較参照用データは不要になるし,もっと高速でΘを小さくできる.現在はΘに 2^-n という小数を与えているが,これを 10^-n とすればずっと小さくなるし,計算精度も測りやすくなる.実装は簡単なのでやってみることにしう.

円周率πの近似値を計算する

久しぶりに開発環境に戻ってきた.「円周率πの近似値計算」をやるつもりなのだが,どうもさっぱり勝手が見えなくなってしまった.まず,言語の選定から始めなくてはならない.条件は複素関数とBigFloatが使えることだ.C++, Julia, Python はいすれもこれらの機能を持っている.これは最終的にはツールとして使えるようにしたいので,その意味ではC++しか選択肢はないのだが,C++の複素数は64ビットまでしか使えない.他の2つは任意長DOUBLEが使えるので,とりあえず,Juliaを使うことにした.Juliaはこれまでにもかなり使い込んでいる.

バックアップにはフォルダが10個残っている.しかし,有り物を動かそうとしてもうまく動かない.Eドライブ(開発支援)には5個フォルダがあり,その中の「蜜蜂天国」から入ったのだが,ソースファイルが見当たらない.⇒フォルダを開いたら見えるようになった.ワークスペースを指定したのだが...別途フォルダを選択する必要があるようだ.

実行したら,Revise というモジュールをインストールするように促されたので実行したら,次のようなワーニングが出た.

julia> using Revise
[ Info: Precompiling Revise [295af30f-e4ad-537b-8983-00126c2a3abe]
WARNING: using IR.SSAValue in module LoweredCodeUtils conflicts with an existing identifier.
WARNING: using IR.SlotNumber in module LoweredCodeUtils conflicts with an existing identifier.

どうも余分なことをしてしまったようだ.確かJuliaはソースを修正しても直ちに反映しないような動作になっていたような気がするが,それを改善してすぐ動くようにするパッケージと思われる.⇒再起動して動くようになった...少し感覚が戻ってきた.見覚えのあるこんな画面が出てきた.いや,すごいな.こんなことまでやってる.

image

Lorentz

このGIFアニメはいつまでも終わらない...121KBというそれほど大きなファイルではないのだが...再帰関数というフォルダには何本か数値計算的なものが入っているので,ここから開始することにしよう.何をやろうとしているのかはよく分からないが,BigFloatが使われているので,目的に近いような気がする.

F = 6.0 / (2.0 + F) という再帰関数を実行し,A=1.64575131106459059から,(A+1)^2=6.9999999999999999 という値が出力されている.pre::Int = 256 となっているので,256ビット整数演算をやっているようだ.「階乗の末尾連続ゼロ.jl は動かなかった.「y=x^2-3/2」でもエラーが起きている.まぁ,とりあえず動いているので,なんとかなるだろう.