1

python中有没有办法将小数部分截断为5位或7位?

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

谢谢

4

3 回答 3

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')
于 2012-05-17T22:07:37.840 回答
2

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

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

于 2012-05-17T22:28:52.273 回答
0

这似乎有效

from decimal import *
getcontext().prec = 7
math.exp(- Decimal(x))
于 2012-05-18T14:13:26.017 回答