Python中的长整型和浮点型操作

0 投票
5 回答
1632 浏览
提问于 2025-04-15 14:51

我正在尝试计算这个:

from scipy import *
3600**3400 * (exp(-3600)) / factorial(3400)

出现了错误:不支持长整型和浮点型

5 个回答

1

你可以试试使用 Decimal 这个对象。虽然计算会慢一些,但你就不会遇到处理非常小的数字时的问题。

from decimal import Decimal

不过,我不太清楚 Decimal 和 scipy 模块是怎么互动的。

这个 numpy 讨论 可能会对你有帮助。

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

试着用对数来处理问题,而不是直接用数字。因为你做的操作都不是加法或减法,所以你可以整个过程都用对数的形式来进行,最后再转换回去。

撰写回答