我已经在PC上尝试以下操作,并且效果很好,但是在pyschools网站上仍然显示“浮点除以零”。为什么??

时间:2018-12-13 06:30:34

标签: python

请在下面的链接中找到问题的描述: EOF while parsing at the end of my code ;estimatePi() problem from pyschools

根据印度数学家Srinivasa Ramanujan找到的公式,编写一个函数EstimatePi()以估计并返回pi的值。它应该使用while循环来计算求和项,直到最后一项小于1e -15为止。计算距离的公式如下:

enter image description here

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())  

1 个答案:

答案 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循环,只要whilex

  • 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