はじめに
オイラーの等式と呼ばれる式がある。
e^iπ+1=0
一見関係のない3つの数、ネイピア数と虚数と円周率の間に関係性があるという式。
eとπは無理数で、それぞれの計算式の一例は以下のとおり。
e=Σ1/n! (n=0~∞)
ラマヌジャンよりも収束の速い、チュドノフスキーの式を使って、
sum = Σ((-1)^n*(6n)!(13591409+545140134n))/((3n)!n!^3(640320^3)^(n+0.5)) (n=0~∞)
π = 1/(12*sum)
πの計算は、n=0とn=1を計算すれば、十分な精度が得られる。
ここで、十分とはコンピュータプログラムで一般的に扱える64bit幅の精度のことで、大体15桁。
エクセルでPI()とかEXP(1)を使っても、桁数の限界があるので、これ以上は面倒すぎてやめる。また、エクセルは内部的にeを持ってるのはなくて、同じように近似計算してるのかも。
こうしてみると、
ネイピア数の計算式も、高速に求める式はありそうだ。
問題は、虚数空間と円周率に関係性が見出せるか。面積を何かの式で表すことが出来るか、だ。
さて、プログラムでこういった無理数の計算をすると、必ず、有効桁数の問題にぶつかる。floatが32bitでdoubleが64bit、それぞれおよそ7桁、15桁ぐらいの精度。これ以上になると、専用ライブラリを使う必要が出てくる。
これまでも、簡単なライブラリがないか、調べてはいるもののピンとくるものがない。今回見つけたのは、pythonのdecimal。
decimal.getcontext().prec = 100;//有効桁数指定
decimal.Decimal(1)として使う。
しかし、pythonは速いのか、ライブラリは速いのか問題があって、まだ使ってみる気になってません。