我使用 wallis' 方法的 pi 近似不起作用,我不知道发生了什么



我在Python 3.7中工作,我的部分任务是定义Wallis的近似圆周率方法。我是一名数学学生,不适合做计算机科学,真的可以使用一些帮助,这总共相当于我成绩的 40%,如果不正确定义这一点,我就不能再做任何事情了。这是我目前编写的代码:

def pi_wallis(n):
z=1
for k in range(n):
a=(2.0*k)//((2.0*k)-1.0)
b=(2.0*k)//((2.0*k)+1.0)
z*=(a*b)
return z

无论我输入什么,我总是得到-0.0,谁能说明为什么?我首先有 z=0 并尝试更改为 z=2,仍然得到 -0.0

您使用的是整数除法 (//(,这意味着一个分数(例如,第一次迭代中的2/3(足以使整个序列为 0。

您应该使用浮点除法 (/(。如果您从 1 开始序列并在n + 1中结束,也会更清晰(因为range最终是排他性的(。

def pi_wallis(n):
z = 1
for k in range(1, n + 1):
a = (2.0*k) / ((2.0*k)-1.0)
b = (2.0*k) / ((2.0*k)+1.0)
z *= a*b
return z

相关内容

最新更新