Python 计算幂与阶乘
Python calculating power vs. factorial
我现在在上大学,我的一门学科是离散数学。
从离散数学我知道 n! > 2^n for n > 3. 我知道 python 可以计算 20,000!,我已经在我的电脑上完成了,当然需要几秒钟。但它无法计算 2 的 1,500 次方,这肯定更小。有什么想法吗?
看来只是C标准提供的math.pow函数有问题。它似乎失败了,因为 math.pow
使用浮点数,但 **
使用 long
。 math.pow(2, 1023)
会工作,math.pow(2, 1024)
会失败。
In [1]: 2**1500
Out[1]: 35074662110434038747627587960280857993524015880330828824075798024790963850563322203657080886584969261653150406795437517399294548941469959754171038918004700847889956485329097264486802711583462946536682184340138629451355458264946342525383619389314960644665052551751442335509249173361130355796109709885580674313954210217657847432626760733004753275317192133674703563372783297041993227052663333668509952000175053355529058880434182538386715523683713208549376L
In [2]: from math import pow
In [3]: pow(2, 1500)
---------------------------------------------------------------------------
OverflowError Traceback (most recent call last)
<ipython-input-3-fa67a1c786b4> in <module>()
----> 1 pow(2, 1500)
OverflowError: math range error
我现在在上大学,我的一门学科是离散数学。 从离散数学我知道 n! > 2^n for n > 3. 我知道 python 可以计算 20,000!,我已经在我的电脑上完成了,当然需要几秒钟。但它无法计算 2 的 1,500 次方,这肯定更小。有什么想法吗?
看来只是C标准提供的math.pow函数有问题。它似乎失败了,因为 math.pow
使用浮点数,但 **
使用 long
。 math.pow(2, 1023)
会工作,math.pow(2, 1024)
会失败。
In [1]: 2**1500
Out[1]: 35074662110434038747627587960280857993524015880330828824075798024790963850563322203657080886584969261653150406795437517399294548941469959754171038918004700847889956485329097264486802711583462946536682184340138629451355458264946342525383619389314960644665052551751442335509249173361130355796109709885580674313954210217657847432626760733004753275317192133674703563372783297041993227052663333668509952000175053355529058880434182538386715523683713208549376L
In [2]: from math import pow
In [3]: pow(2, 1500)
---------------------------------------------------------------------------
OverflowError Traceback (most recent call last)
<ipython-input-3-fa67a1c786b4> in <module>()
----> 1 pow(2, 1500)
OverflowError: math range error