2017-03-16 1110 views
0
import math 
k = 0 
def factorial(k): 
    if k == 0: 
     return 1 
    else: 
     return k * factorial(k - 1) 


formula = (((factorial(4 * k)) * (1103 + 26390 * k))/((factorial(k) ** 4)) * (396 ** (4 * k))) 

    while k > (1e − 15): 
     for k in range(): 
     if k == 0: 
      return k 
     else: 
      return k + formula 
     print(summation(k, formula)) 

value_wanted = ((2* math.sqrt(2))/9801) * summation(k) 
print('1/pi equals' , value_wanted) 

这是一个代码,它试图使公式近似于pi的值。它给了我一个错误,'k> 1e - 15',我不知道为什么。我希望代码返回公式变量中写的公式的总和,每次将k值改为1,直到最后一项小于1e - 15。如何在python中从0到无穷大求和?

+0

什么错误?请阅读[如何提问](https://stackoverflow.com/help/how-to-ask)并改进问题。另外请注意,缩进在python中很重要,而你的方式就不行了。 –

+0

你在用什么编辑器?由于'(1e-15)'中的减号不是一个普通的连字符,而是unicode char MINUS SIGN,所以你得到'SyntaxError:标识符中的无效字符'。 'unicodedata.name(' - ')'会告诉你这个。 –

+0

请修复您的缩进 – jsbueno

回答

1

您不能创建一个范围到无限 - 保持电脑计数上,你可以使用while循环:

k = 0 
while True: 
    k += 1 
    ... 

然而,正如你可以看到,这段代码有它永远不会结束的缺点,因为电脑会忙着数on和on: 正常的数字方法不能算作“无穷大” - 在继续实验之前,你应该看看无穷大的数学概念。

如果您需要数字计算,只需选择一个“足够大”的数字。对于考虑无穷大的代数分辨率,请检查sympy包。