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