我正在尝试计算pi的值,但是我的逻辑中存在一些语义错误,我无法弄清。
def taylor(precision):
iter = 1
sum = 0
fx = 100
sign = 1
while (abs(fx) > precision):
if not iter % 2 == 0:
print(sign)
sum += ((1 / (iter)) * sign)
my_pi = 4 * (sum)
fx = math.pi - my_pi
iter += 1
sign *= -1
return my_pi
这将导致无限循环。
我应该使用此系列,并以特定的精度找到my_pi
:
π/ 4 =(1/1)-(1/3)+(1/5)-(1/7)+(1/9)-...
编程的新手,任何帮助都将是惊人的!
答案 0 :(得分:1)
这部分在这里
if not iter % 2 == 0:
仅在迭代不是偶数(即1、3、5 ...)时才求和。 但是,您需要在每次迭代中交替使用符号,包括偶数迭代的符号。
结果,您得到1/1 + 1/3 + 1/5 + ...
。
相反,尝试
if not iter % 2 == 0:
print(sign)
sum += ((1 / (iter)) * sign)
sign *= -1 # move the sign assignment here