Chudnovskyアルゴリズムと呼ばれるπアルゴリズムに出会いました。Python の実装は、Python に付属のパッケージを使用するウィキペディアに示されています。decimal
しかし最近、ガウス・ルジャンドルのアルゴリズムをテストしたところ、高精度の計算を扱う場合mpmath
よりもパッケージの実行がはるかに効率的であることがわかったので、このアルゴリズムが で動作することを願っています。これが私のコードです:decimal
mpmath
#!/usr/bin/env python
from mpmath import *
import pi_compare # A module aim to compare result with standard pi
mp.dps = 1000
def pi():
K, M, L, X, S = 6, mpf('1'), 13591409, 1, mpf('13591409')
for i in xrange(0,100):
M = (K**3 - K*16) * M / K**3
L += 545140134
X *= -262537412640768000
S += (M * L) / X
K += 12
return mpf('426880') * mpf('10005').sqrt() / S
P = pi()
print P
print pi_compare.compare(str(P))
私は Python 自体が大きな整数を処理できると信じていmpmath
ますK, L, X
。問題は非常に多く発生しS += (M * L) / X
ていると思います。X
こんなにたくさんの数に対処するのはとても混乱しました。アドバイスをいただければ幸いです。ありがとうございます。