请在下面的链接中找到问题的描述: EOF while parsing at the end of my code ;estimatePi() problem from pyschools
根据印度数学家Srinivasa Ramanujan找到的公式,编写一个函数EstimatePi()以估计并返回pi的值。它应该使用while循环来计算求和项,直到最后一项小于1e -15为止。计算距离的公式如下:
import math
def estimatePi():
k=0
x=0
sum1=0
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
while x<1/1000000000000000 :
x=(factorial((4*k))*(1103+26390*k))/(factorial(k)**4*396**(4*k))
sum1+=x
k+=1
return 9801/(2*math.sqrt(2)*sum1 )
print(estimatePi())
答案 0 :(得分:0)
一些注意事项:
在Python2中,由于整数除法,1/1000000000000000
正好是0
,因此while循环永远不会运行,sum1
停留在0
和{{1 }}不能被0除。您可以将其替换为9801/(2*math.sqrt(2)*sum1)
。
您从1E-15
开始,但是一旦计算出x = 0
,它就会变得比x
大,因此1E-15
循环仅运行一次。您可以将while
设置为x
并运行1
循环,只要while
比x
1E-15
是在pi
中定义的,因此您可能不应该导入math
。您可以简单地使用math
而不是**0.5
。
sqrt
在Python2中对于任何大于1的(factorial((4*k))*(1103+26390*k))/(factorial(k)**4*396**(4*k))
返回0
。您应该改用浮点除法。
这是经过修改的代码,应该可以在Python2和Python3上正常工作
k