def wallis(n):
pi = 0.0
for i in range(n):
left = (2 * i)/(2 * i - 1)
right = (2 * i)/(2 * i + 1)
total = left * right
pi = pi + total
return pi
print wallis(1000)
print wallis(10000)
print wallis(100000)
我准确地复制了公式,但我一直得到0作为输出。有人能告诉我我做错了什么吗。Python2.7。
公式的链接是here
Tags:
只是补充一点,你可以用一种Python的方式来做这件事,看起来也更接近数学表达式。(这里.25负责浮点转换)
Python正在进行整数除法,并截断小数。这是因为要除法的两个值都是整数。将其中一个数字转换为浮点数以获取浮点值。
或者,正如@kindall指出的,您可以将常量直接更改为float,并避免调用
float
函数:如果/当您切换到python 3.x时,就不需要这样做了。实际上,您需要用
//
显式请求整数除法。根据@Serdalis的注释,您还可以在文件顶部添加
from __future__ import division
,以获得与python 3.x相同的行为(即,您不需要在等式中添加float
)除了@SethMMorton强调的问题外,您的公式是错误的。首先它是一个积而不是和,其次它给出的是π/2而不是π。最后没有理由从0循环。
相关问题 更多 >
编程相关推荐