我试图实现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)
答案 0 :(得分:1)
首先,该网站不是一个错误搜索网站。 但是我对这个问题感兴趣,并检查了你提到的网站。
如果查看a
的定义,则会看到第一个加数为1
,而不是-6*5*4/640320^3
。
此外,由于您在k = 1
开始循环,因此您还需要使用第一个加号[{1}}和a_sum
分配变量b_sum
和a_0 = 1
。
答案 1 :(得分:0)
使用getcontext().prec = ...
代替getcontext.prec = ...