2016年 11月 15日
def FabriceBellard(len):
var('a:z')
term = (-1)**n/2**(10*n+6) * (-2**5/(4*n+1) - 1/(4*n+3) + 2**8/(10*n+1)
- 2**6/(10*n+3) - 2**2/(10*n+5) - 2**2/(10*n+7) + 1/(10*n+9))
sigma = 0
m = 0
while True:
t = term.evalf(len,subs={n:m})
if abs(t)<10**(-len):
break
sigma += t
m += 1
return sigma
In [11]: FabriceBellard(51)
Out[11]: 3.14159265358979323846264338327950288419716939937511
In [12]: sympy.pi.evalf(51)
Out[12]: 3.14159265358979323846264338327950288419716939937511
In [19]: str(FabriceBellard(301))[-50:]
Out[19]: '45648566923460348610454326648213393607260249141274'
In [20]: str(sympy.pi.evalf(301))[-50:]
Out[20]: '45648566923460348610454326648213393607260249141274'
300桁も問題なく動いているようだ。
さらに続けて、400桁も確かめてみよう。
In [22]: str(FabriceBellard(401))[-50:]
^C---------------------------------------------------------------------------
KeyboardInterrupt Traceback (most recent call last)
しかし、400桁まで計算してみようとしたら、いつまで経っても、うんともすんとも言わないのでCtrl-Cで強制終了した。