Python OverflowError:数学范围错误

时间:2015-04-11 22:26:59

标签: python python-2.7

Python: OverflowError: math range error相似。下面是我的代码,以及我尝试调试时得到的错误(和变量值)。在python控制台中手动执行数学运算正常。是因为sigma是一个int吗?对于它的价值,MSE变量是通过对numpy数组求和而生成的,而simga变量只是" 100"硬编码。

def normalize_error(sigma, mse):
    return math.exp(-mse/(2*(sigma**2)))

enter image description here

1 个答案:

答案 0 :(得分:2)

如果指数值太大,您将收到此错误。由于您使用的是math.exp,因此该值将为浮点数。

系统中最大的浮点数将由sys.float_info定义,具体取决于您的系统。

>>> import sys
>>> sys.float_info
sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)

所以在我的系统上,1.7976931348623157e+308是我可能拥有的最大的浮动。


您可以检查以下运行以进行相同的分析:

>>> import math
>>> def normalize_error(sigma, mse):
...     return math.exp(-mse/(2*(sigma**2)))
... 
>>> normalize_error(3, 4)
0.36787944117144233
>>> normalize_error(3, -4)
1.0
>>> normalize_error(.3, -4)
4477014353.361036
>>> normalize_error(.3, -100)
1.8824011022575583e+241
>>> normalize_error(.02, -100)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in normalize_error
OverflowError: math range error