Python中的长整型和浮点型操作
我正在尝试计算这个:
from scipy import *
3600**3400 * (exp(-3600)) / factorial(3400)
出现了错误:不支持长整型和浮点型
5 个回答
2
当你处理这么大数字的时候,普通的64位浮点数是没法用的,这种浮点数是Python核心运行时支持的。你可以考虑一下gmpy
(一定要注意,不要下载sourceforge上的版本,因为那个版本已经过时很久了)——用这个库,加上math
模块和一些小心翼翼的操作...:
>>> e = gmpy.mpf(math.exp(1))
>>> gmpy.mpz(3600)**3400 * (e**(-3600)) / gmpy.fac(3400)
mpf('2.37929475533825366213e-5')
当然,我对gmpy
有点偏见,因为我是这个项目的发起人,并且一直在参与这个项目,但我从来不会对它的浮点运算能力做出过于强烈的声明... 我主要是用它来处理整数的... 不过,它确实让这个计算变得可能!-)
3
试着用对数来处理问题,而不是直接用数字。因为你做的操作都不是加法或减法,所以你可以整个过程都用对数的形式来进行,最后再转换回去。