繁体   English   中英

python e **(-x)OverflowError:(34,“结果太大”)

[英]python e**(-x) OverflowError: (34, 'Result too large')

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

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

谢谢

捕获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')

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

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

这似乎有效

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM