2017-03-16 260 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包。