产生OverflowError的十进制数的幂

时间:2012-06-20 08:24:47

标签: python numpy

我有一个返回 log10 值的函数。在将它们转换为正常数字时,我获得了溢出错误。

  

OverflowError:(34,'数值结果超出范围')

我检查了日志值,发生了这样的错误,例如 508.038057662

我认为虽然python很容易执行 10 ** 509 ,但这个错误必然是由于小数点溢出寄存器。因此我尝试使用像这样的numpy.float64,

result = np.array([ (10**multiplicity(timeseries,om,ph,bins,pos_arr)) for ph in np.linspace(0,twopi,num = bins+1)], dtype = np.float64)

错误是一样的。我是否宣布 float64 错误?

此处 multiplicity()是返回 log10 值的函数。我需要一个值的“列表”。

1 个答案:

答案 0 :(得分:7)

  

我认为虽然python很容易执行10 ** 509,但这个错误必然是由于小数点溢出寄存器。

问题不在于“小数点溢出”,而是由您使用的数据类型引起的。

these have unlimited precision以来,Python可以很高兴地将10 ** 509计算为long

>>> type(10**509)
<type 'long'>

但是,此结果太大,无法存储在float

>>> float(10**509)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: long int too large to convert to float

我们可以非常轻松地检查最大float

>>> import sys
>>> sys.float_info.max
1.7976931348623157e+308

查看this question似乎Numpy float64与标准float具有相同的值范围,因此使用它不会解决您的问题。

相反,您必须使用提供任意精度浮点的第三方模块之一,例如mpmathbigfloat