Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的数值精度_Python_Numerical Analysis - Fatal编程技术网

python中的数值精度

python中的数值精度,python,numerical-analysis,Python,Numerical Analysis,我一直在用python做一些简单的数值实验,比如计算 阶乘。例如,计算32的阶乘: 我的日常工作: 2.6313083693369503e+35 从scipy.misc: 2.6313083693369355e+35 我想指出,我的例程计算阶乘的对数, 它计算从1到32的对数总和(在本例中) 然后我只使用exp函数(我这样做是因为从 Fortran 90) 令人惊讶的是,正确的答案是 263130836933693530167218012160000000 根据pari/gp 如果有人能指

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

我的日常工作:

2.6313083693369503e+35
从scipy.misc:

2.6313083693369355e+35
我想指出,我的例程计算阶乘的对数, 它计算从1到32的对数总和(在本例中) 然后我只使用exp函数(我这样做是因为从 Fortran 90)

令人惊讶的是,正确的答案是

263130836933693530167218012160000000
根据pari/gp

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

log
exp
函数在精度有限的浮点上运行。另一方面,Python的整数可以具有任意精度。所以,你可以用整数计算线性空间中32的阶乘

f = 1
for i in xrange(32):
    f *= i + 1
print f  # prints '263130836933693530167218012160000000'

您可以这样做:

import operator
n=32
print reduce(operator.__mul__,range(1,n+1))
# 263130836933693530167218012160000000

如果您能提供您的日常工作代码,我们将不胜感激。我不确定您在寻找什么。您使用
float
precision重新实现了
math.factorial
,然后通过移入和移出日志空间来丢弃更高的精度,并在最后导致了几个数字的错误。Python与此无关,在fortran中使用双精度也会遇到同样的问题。如果您处理整数,Python会给您大整数,因此您可以强制精确计算阶乘。好的,很高兴知道这一点。使用浮点数的原因是一个数字的阶乘增长非常快,这就是为什么有时候用浮点数来计算它会更好。像我过去所经历的那样,用整数进行运算可能太幼稚了。@user2820579您必须决定:精度还是速度。你不能两者都有。浮动很快,因为它们的精度有限。正如@Hyperboreus所说,这是一种折衷。它将适合我的精度,因为我正在进行数值计算。另外:由于Gamma函数和阶乘函数对于中等大小的参数增长如此之快,因此许多计算环境中都包含一个函数,该函数返回Gamma函数的自然对数[。这就是为什么我尝试使用日志。。。