首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中的Chudnovsky公式

Python中的Chudnovsky公式
EN

Stack Overflow用户
提问于 2018-06-18 09:18:48
回答 2查看 2.3K关注 0票数 1

我正在尝试实现计算pi的Chudnovsky算法。我正在使用这个描述https://www.craig-wood.com/nick/articles/pi-chudnovsky/中的公式

现在它可以工作了,但是它可以显示的最大位数是3.141592653589793238462643385 --只有27位数。

为什么Python会限制这个脚本中的位数?可能是我用错了十进制吗?

以下是我的代码(更新):

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

发布于 2019-02-02 14:48:30

使用getcontext().prec = ...而不是getcontext.prec = ...

票数 2
EN

Stack Overflow用户

发布于 2018-06-18 09:33:07

我对这个问题很感兴趣,并查看了你提到的网站。

如果您查看a的定义,那么您将看到第一个求和是1,而不是-6*5*4/640320^3。另外,由于您在k = 1开始循环,您还需要为变量a_sumb_sum分配第一个和a_0 = 1b_0 = 0

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50906200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档