Python中的Chudnovsky公式

时间:2018-06-18 09:18:48

标签: python algorithm pi

我试图实现Chudnovsky算法来计算pi。 我使用的是此描述中的公式https://www.craig-wood.com/nick/articles/pi-chudnovsky/

现在它正常工作,但它可以显示的最大位数 3.141592653589793238462643385 - 仅 27 位。

为什么Python会限制此脚本中的位数? 可能是我以错误的方式使用十进制

这是我的代码(已更新):

from decimal import Decimal, getcontext
from math import factorial
import sys

def calculate_pi(max_K, number_of_digits):
    getcontext.prec = number_of_digits+2
    a_k, b_k, C, a_sum, b_sum  =  1, 0, 640320, 1, 0
    for k in range(1,max_K):
        a_k *= -(Decimal(24)/Decimal(C**3))*Decimal((6*k-5)*(2*k-1)*(6*k-1))/Decimal(k**3)
        a_sum += a_k
        b_sum += a_k*k


    pi = 426880*Decimal(10005).sqrt()/Decimal(13591409*a_sum + 545140134*b_sum)
    print str(pi)[:number_of_digits+2]

def main(number_of_digits):
    pi = calculate_pi(10000, number_of_digits)


if __name__ == "__main__":
    number_of_digits = int(sys.argv[1])
    main(number_of_digits)

2 个答案:

答案 0 :(得分:1)

首先,该网站不是一个错误搜索网站。 但是我对这个问题感兴趣,并检查了你提到的网站。

如果查看a的定义,则会看到第一个加数为1,而不是-6*5*4/640320^3。 此外,由于您在k = 1开始循环,因此您还需要使用第一个加号[{1}}和a_sum分配变量b_suma_0 = 1

答案 1 :(得分:0)

使用getcontext().prec = ...代替getcontext.prec = ...