有趣的答案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