有趣的答案Tim Rijavec和合成詞。這是一些進一步的想法。
由於syntonym建議,問題是,對於n = 171
scipy.misc.factorial
回報array(inf)
。這是因爲當你調用沒有附加參數的函數時,它返回一個浮點數。因此,它返回準確的整數值,你可以將其設置:
>>> scipy.misc.factorial(171)
array(inf)
>>> scipy.misc.factorial(171, exact = True)
1241018070217667823424840524103103992616605577501693185388951803611996075221691752992751978120487585576464959501670387052809889858690710767331242032218484364310473577889968548278290754541561964852153468318044293239598173696899657235903947616152278558180061176365108428800000000000000000000000000000000000000000
>>>
所以,如果你重寫程序正是如此,你不會得到一個錯誤:
from decimal import Decimal
import scipy.misc
limit = Decimal(2.718)
ris = 0
n = 1
one = Decimal(1)
while ris <= limit:
ris = n/Decimal(scipy.misc.factorial(n, exact= True) ** (one/n))
n= n + 1
print(n,ris)
但由於某些原因,它是效率低下,需要一段時間才能完成。在這樣的情況下,你可能會想,條件緩和:
while abs(ris - limit) > 0.025:
ris = n/Decimal(scipy.misc.factorial(n, exact= True) ** (one/n))
n= n + 1
'scipy.misc.factorial(171)'是無窮大,所以'N/scipy.misc.factorial(171)'是零。也許你可以使用不同的階乘函數來解決問題。 – syntonym 2015-03-31 11:46:50