9

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

>>> math.exp(-1200)
0.0

它给了我一个下溢;我该如何解决这个问题?

谢谢你的帮助 :)

4

2 回答 2

12

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

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

如果您需要的功能多于decimal支持的功能,则可以查看mpmath我使用并非常喜欢的 library:

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

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

于 2012-10-29T02:31:53.873 回答
4

尽可能长时间地尝试在对数域中计算。即避免计算精确值,但继续使用指数。

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

于 2012-10-29T02:32:34.020 回答