我在尝试这个计算时遇到了溢出错误,但我无法弄清楚原因。
1-math.exp(-4*1000000*-0.0641515994108)
你请求math.exp计算的数字在十进制下有超过110,000位数。这略微超出double类型能表示的范围,因此导致了溢出。
要解决这个问题,请使用:
try:
ans = math.exp(200000)
except OverflowError:
ans = float('inf')
我认为在Python中,数值过大无法适应double
的范围,这就是为什么会出现OverflowError
。在我的机器上,我可以计算的最大值的exp
略大于709.78271。
使用np.exp()替代math.exp()
Numpy的溢出处理更加优雅,np.exp(999)的结果为inf, 因此1. / (1. + np.exp(999))的结果直接为零
import math
import numpy as np
print(1-np.exp(-4*1000000*-0.0641515994108))
http://www.wolframalpha.com/input/?i=math.exp%28-4*1000000*-0.0641515994108%29
calc
中计算您表达式的math.exp需要很长时间 - 实际上在我的电脑上大约需要3分钟。输出无法适应屏幕,但这是它的最后一部分:72601064848030549330052235283692208900018564830019400961030549300613573049038658490326003709885716700599883485335384987825755170505520081515667880006364976728119694600659746416440802282624919298297947165561974790549306225384099033699937030324423057761382164874383992786304290520859618809208146480637711575173287535774531529104427355177803053295844887694582338200906830029698966101673406039727344889895537434766431106 - kovshenin