python中非常小的数字的指数

时间:2012-10-29 02:26:01

标签: python math exponential underflow

我正在尝试计算python中-1200的指数(这是一个例子,我不需要-1200特别是一组数字大约-1200)。

>>> math.exp(-1200)
0.0

它给了我一个下流;我怎么能解决这个问题?

感谢您的帮助:)

2 个答案:

答案 0 :(得分:12)

在标准库中,您可以查看decimal模块:

>>> import decimal
>>> decimal.Decimal(-1200)
Decimal('-1200')
>>> decimal.Decimal(-1200).exp()
Decimal('7.024601888177132554529322758E-522')

如果您需要的功能多于decimal支持的功能,您可以查看我使用的库mpmath,并且很多:

>>> import mpmath
>>> mpmath.exp(-1200)
mpf('7.0246018881771323e-522')
>>> mpmath.mp.dps = 200
>>> mpmath.exp(-1200)
mpf('7.0246018881771325545293227583680003334372949620241053728126200964731446389957280922886658181655138626308272350874157946618434229308939128146439669946631241632494494046687627223476088395986988628688095132e-522')

但是如果可能的话,你应该看看你是否可以重铸你的方程式以完全在日志空间中工作。

答案 1 :(得分:4)

尽可能尝试在对数域中进行计算。即避免计算确切的值,但继续使用指数。

exp(-1200)是一个非常小的数字(正如exp(1200)是一个非常大的数字),所以也许确切的值并不是你真正感兴趣的。如果你只需要比较这些数字然后对数空间就足够了。