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

Calculating pi with Leibniz Formula

我正在尝试使用莱布尼茨公式计算圆周率。但是,我的代码似乎总是在最后产生'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 花了一段时间 运行 你的代码。 Additionally, if you're running that code in Python 2 that range expression is going to use up a lot of memory。如果您愿意,这里有另一种方法,它懒惰地生成莱布尼茨公式项来估计 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