2017-01-09 158 views
-1

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

回答

5

这个总和收敛到π/ 4,而不是4π。因此,你要使用的结果

x * 4 

x/4 

除此之外,你的代码工作正常。

+0

是的,我是白痴.. –

2

我的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

你可以假设的Python 3,否则师'1/t'将返回0和原代码可以没有产生0.1963 .. – wim

+0

@wim好点 – Tagc

+0

这对pi来说不是一个很好的近似值。两个准确的数字似乎不值得付出努力。 – duffymo