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

python e**(-x)溢出错误:(34,‘结果太大’),python,Python,python中有没有办法将小数部分截断为5或7位 如果不是,我如何避免像e**-x这样的浮点数变得太大 谢谢捕获溢出错误或使用十进制模块。Python不会假设您对溢出没有问题 >>> 0.0000000000000000000000000000000000000000000000000000000000000001**-30 Traceback (most recent call last): File "<stdin>", line 1, in <mod

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

如果不是,我如何避免像e**-x这样的浮点数变得太大

谢谢

捕获溢出错误或使用十进制模块。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不会假设您对溢出没有问题

>>> 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不会溢出或下溢。

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

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

这似乎可行

from decimal import *
getcontext().prec = 7
math.exp(- Decimal(x))
这似乎有效

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

当x给你这个错误时,它的值是多少?值是0.xxxxxx。。。它们中的很多都破坏了32位的可用性。我习惯于像C这样的真实语言,当它达到极限时,会自动向上或向下取整,这就是我想要的。我想四舍五入到小数点后6或7位。有什么想法吗?真正的语言。。。而蟒蛇则是童话故事的素材。当我用python编写代码时,我经常骑独角兽。@x:x是0.xxxxxx?这似乎有点像一个递归定义。什么是xxxxx?你能说得更具体些吗。请使用数字而不是xs。像C这样的真实语言你是说C的设计没有定义的行为,编译器可以重新格式化你的硬盘驱动器,如果它想要的话,这是实现溢出的事实上合理的方式吗?当x给你这个错误时,它的值是多少?值是0.xxxxxx。。。它们中的很多都破坏了32位的可用性。我习惯于像C这样的真实语言,当它达到极限时,会自动向上或向下取整,这就是我想要的。我想四舍五入到小数点后6或7位。有什么想法吗?真正的语言。。。而蟒蛇则是童话故事的素材。当我用python编写代码时,我经常骑独角兽。@x:x是0.xxxxxx?这似乎有点像一个递归定义。什么是xxxxx?你能说得更具体些吗。请使用数字而不是xs。像C这样的真实语言你是说C的设计是未定义的行为,编译器可以重新格式化你的硬盘,如果它想要的话,这是实现溢出的事实上合理的方式吗?+1也用于解决Python选择不为你做假设的问题。如果你使用decimal.Decimal1e-64或0.000[etc]1您可以通过传递二进制rep来避免引入的错误,至少在打算使用10^-64的情况下是这样。因此,对于decimal,我可以使e=decimal.Decimalmath.e,并使用e**-x?+1中的“e”来处理Python选择不为您进行假设的问题。如果您使用Decimal1e-64或0.000[etc]1您可以通过传递二进制rep来避免引入的错误,至少在打算使用10^-64的情况下是这样。因此,对于decimal,我可以使e=decimal.Decimalmath.e,并在e**-x中使用“e”?