我正在尝试使用莱布尼茨公式计算圆周率。但是,我的代码似乎总是在最后产生"0.19634952834936123",这显然不是pi。
法典:
import math
x = 0
y = 0
for t in range(1,10000001):
if t % 2 != 0:
y += 1
if y % 2 != 0:
x += 1/t
else:
x -= 1/t
else:
pass
print(x/4)
这个总和收敛到 π/4,而不是 4π。 因此,您希望使用结果
x * 4
不
x / 4
除此之外,您的代码工作正常。
我的 IDE 花了一段时间来运行您的代码。此外,如果您在 Python 2 中运行该代码,range
表达式将占用大量内存。如果您愿意,这里有一种替代方法,可以懒惰地生成莱布尼茨公式项来估计 pi。Python的生成器函数似乎非常适合这种任务。
def estimate_pi(num_terms):
return 4 * sum(x for x in generate_leibniz_terms(num_terms))
def generate_leibniz_terms(num_terms):
denominator = 1
sign = 1
for _ in range(num_terms):
yield sign * (1 / denominator)
sign = -sign
denominator += 2
print(estimate_pi(100))
输出
3.1315929035585537