2010-10-29 76 views
18

我得到一个溢出错误,当我尝试这个计算,但我无法弄清楚为什么。Python:OverflowError:数学范围错误

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

它一直无法进行计算表达式的math.exp在linux'calc' - 实际上我的电脑上约3分钟。输出不适合在屏幕上,但这里是它的最后一部分:72601064848030549330052235283692208900018564830019400961030549300613573049038658490326003709885716700599883485335384987825755170505520081515667880006364976728119694600659746416440802282624919298297947165561974790549306225384099033699937030324423057761382164874383992786304290520859618809208146480637711575173287535774531529104427355177803053295844887694582338200906830029698966101673406039727344889895537434766431106 – kovshenin 2010-10-29 10:22:18

回答

18

您要求math.exp计算的数字有十进制数超过110,000位数。这稍微超出了double的范围,所以会导致溢出。

+7

有没有解决方案? – 2015-05-28 06:45:38

3

这可能给你一个线索,为什么:

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

通知的111442指数。

3

我认为这个值太大,不适合python的double,这就是为什么你得到OverflowError。我可以用Python计算我机器上的最大值exp只比709.78271略大。

11

要修复它使用:

try: 
    ans = math.exp(200000) 
except OverflowError: 
    ans = float('inf')