Python循环帮助 - 使用Gregory-Leibniz系列计算PI

时间:2014-09-24 21:22:54

标签: python math

我遇到一个问题,让python 2.5 shell做我需要做的事情。我试图让用户输入“n”的值,表示循环将重复的次数。实际上,我需要让用户输入N对应于Gregory-Leibniz系列中的术语数量,并输出pi的近似值。

Gregory-Leibniz系列 PI = 4 *((1/1) - (1/3)+(1/5) - (1/7)+(1/9) - (1/11)+(1/31)...)

所以当n为3时,我需要循环计算高达1/5。不幸的是,它总是给我一个值为0的变量。

我现在的代码是错误的,我知道。只是寻求一些帮助。代码如下:

def main():
    n = int(raw_input("What value of N would you like to calculate?"))
    for i in range(1,n,7):
        total = (((1)/(i+i+1))-((1)/(i+i+2))+((1)/(i+i+4)))

    value = 4*(1-total)
    print(value)

main()

3 个答案:

答案 0 :(得分:2)

您需要累积条款。 e.g。

total = 0.0
term = 1.0
for i in range (1,n+1):
    denom = 2*i-1
    total += term/denom
    term = -term

当然,你可以更简洁地表达这个

也许更自然地使用它来代替

总计= 0.0 term = 1.0 对于范围内的i(n):     denom = 2 * i + 1     总计+ =期限/ denom     term = -term

当你以这种方式使用范围中最自然形式的n个术语时。注意计算分母的差异。

答案 1 :(得分:2)

这使用整数除法,因此您将得到零:

total = (((1)/(i+i+1))-((1)/(i+i+2))+((1)/(i+i+4)))

相反,使用浮动来获得浮动除法。

total = ((1.0/(i+i+1))-(1.0/(i+i+2))+(1.0/(i+i+4)))

在python 2中,默认情况下对整数执行/会得到一个整数。

在python 3中,这已被更改,/始终执行浮点除法(//执行整数除法。)

答案 2 :(得分:1)

Q1)转到https://en.wikipedia.org/wiki/Leibniz_formula_for_%CF%80找到π的莱布尼兹公式。设S是用于近似π的项的序列。我们可以看到,S中的第一项是+1,S中的第二项是-1/3,S中的第三项是+1/5,依此类推。找到最小数量的项,使得4 * S和π之间的差小于0.01。即,abs(4 * S-math.pi)< = 0.01。