用莱布尼茨公式计算圆周率



我正在尝试使用莱布尼茨公式计算圆周率。但是,我的代码似乎总是在最后产生"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

最新更新