gpt4 book ai didi

python - pyschools 主题 5

转载 作者:太空宇宙 更新时间:2023-11-04 09:13:42 24 4
gpt4 key购买 nike

编写一个函数estimatePi(),根据印度数学家Srinivasa Ramanujan 发现的公式估算并返回Pi 的值。它应该使用 while 循环来计算求和项,直到最后一项小于 1e-15。 Pi的估计公式如下:按照Ramanujam的估计

(对不起,我无法上传图片)

def estimatePi():
import math
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
k=0
final=0
pi=0
while pi<1e-15:
a=factorial(4*k)
b=(1103+26390*k)
c=factorial(k)
d=c**4
e=396**(4*k)
f=2*math.sqrt(2)/9801
final+=(a*b*f)/(d*e)
k+=1
pi=1/final
return pi

而且,我的问题是:预期的答案是 =3.14159265359我的答案是 =3.14159273001

我找不到我的错 :(。有人可以帮我解决这个问题吗?

最佳答案

我的 friend ,您的代码有几个问题。首先,在您的代码中,请记住变量 pi 的任何形状或形式都不等于 final。您正在计算一个不迭代的 while 循环,因为 pi 显然比 1e-15 大。所以简而言之,您的代码只是在 k=0 处计算您的公式,然后它停止了。所以这是一种可能的方法:

    def estimatePi():
import math
def factorial(n):
if n == 0:
return 1
else:
return math.factorial(n)
k=1 # we want it at k=1 not 0 since we already have k=0 as Final
Final=0.31830987844 #this is the value at k=0, the first value
while Final>1e-15: """ Note that 1e-15 is the limiting value and we want all b values that are less than 1e-15. k=2 is the final k value where b has the last smaller number than 1e-15."""

b=(2*math.sqrt(2)/9801)*(factorial(4*k)*(1103+26390*k))/((factorial(k)**4)*(396**(4*k)))

Final=Final+b
k=k+1
return 1/Final
print estimatePi()
#This gives you the number you are looking for ---3.14159265359.

关于python - pyschools 主题 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11880131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com