1

我一直在用 python 做简单的数值实验,比如计算阶乘。例如,计算 32 的阶乘:

我的日常:

2.6313083693369503e+35

来自 scipy.misc:

2.6313083693369355e+35

我想指出我的例程计算阶乘的对数,它计算从 1 到 32 的对数之和(在这种情况下),然后我只取 exp 函数(我这样做是因为从Fortran 90)。

令人惊讶的是正确答案是

263130836933693530167218012160000000

根据pari/gp。

如果有人能指出我可以在 Python 中寻找正确数字答案的参考资料,我会非常高兴。文档没问题,但前提是需要“短”数字。

4

2 回答 2

0

logexp函数在精度有限的浮点上运行。另一方面,Python 的整数可以具有任意精度。因此,您可以使用整数很好地计算线性空间中 32 的阶乘。

f = 1
for i in xrange(32):
    f *= i + 1
print f  # prints '263130836933693530167218012160000000'
于 2013-10-30T16:08:20.640 回答
0

你可以这样做:

import operator
n=32
print reduce(operator.__mul__,range(1,n+1))
# 263130836933693530167218012160000000
于 2013-10-30T16:18:54.483 回答