python e **( - x)溢出错误:(34,'结果太大')

时间:2012-05-17 21:46:46

标签: python

python中是否有一种方法可以将小数部分截断为5位或7位?

如果没有,我怎样才能避免像e **( - x)这样的浮点数太大?

由于

3 个答案:

答案 0 :(得分:5)

捕获OverflowError或使用decimal模块。 Python不会假设您对溢出没问题。

>>> 0.0000000000000000000000000000000000000000000000000000000000000001**-30
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: (34, 'Result too large')
>>> d = decimal.Decimal(0.0000000000000000000000000000000000000000000000000000000000000001)
>>> d**-30
Decimal('1.000000000000001040827834994E+1920')

答案 1 :(得分:2)

“结果太大”并不是指数字的十进制表示中的字符数,这意味着指数函数产生的数字足以溢出python在内部用于存储浮动的任何类型点值。

您需要使用不同的类型来处理浮点计算,或者重新编写代码以使e **( - x)不会溢出或下溢。

答案 2 :(得分:0)

这似乎有用

from decimal import *
getcontext().prec = 7
math.exp(- Decimal(x))