Python:溢出错误:数学范围错误

Python:溢出错误:数学范围错误,python,math,overflow,Python,Math,Overflow,当我尝试这个计算时,我得到了一个溢出错误,但我不知道为什么 1-math.exp(-4*1000000*-0.0641515994108) 您要求math.exp计算的数字以十进制表示超过110000位。这稍微超出了double的范围,因此会导致溢出。这可能会为您提供以下原因的线索: http://www.wolframalpha.com/input/?i=math.exp%28-4*1000000*-0.0641515994108%29 请注意111442指数。我认为该值太大,无法放入py

当我尝试这个计算时,我得到了一个溢出错误,但我不知道为什么

1-math.exp(-4*1000000*-0.0641515994108)

您要求math.exp计算的数字以十进制表示超过110000位。这稍微超出了double的范围,因此会导致溢出。

这可能会为您提供以下原因的线索:

http://www.wolframalpha.com/input/?i=math.exp%28-4*1000000*-0.0641515994108%29

请注意111442指数。

我认为该值太大,无法放入python中的
双精度
,这就是为什么会出现
溢出错误。在我的机器上,用Python计算的
exp
的最大值略大于709.78271。

要修复它,请使用:

try:
    ans = math.exp(200000)
except OverflowError:
    ans = float('inf')
尝试np.exp()而不是math.exp()

Numpy更优雅地处理溢出,np.exp(999)生成inf 和1因此,(1.+np.exp(999))只会导致零


不幸的是,没有人解释真正的解决办法是什么。我使用以下方法解决了问题:

从mpmath导入*

您可以在下面找到文档:


在linux中计算表达式的math.exp要花很长时间
calc
-实际上在我的电脑上大约需要3分钟。输出不适合屏幕,但这里是最后一部分:72601064848030549330052235283692208900018564830019400961030549300613573049038658490326003709885716700599883485335384987825755170505520081515667880006364976728119694600659746416440802282624919298297947165561974790549306225384099033699937030324423057761382164874383992786304290520859618809208146480637711575173287535774531529104427355177803053295844887694582338200906830029698966101673406039727344889895537434766431106
import math 
import numpy as np

print(1-np.exp(-4*1000000*-0.0641515994108))