产生OverflowError的十进制数的幂

Mel*_*kor 1 python numpy

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

溢出错误:(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)
Run Code Online (Sandbox Code Playgroud)

错误是一样的.我是否声明了float64错误?

这里multiplicity()是返回log10值的函数.我需要一个值的"列表".

Dav*_*ebb 7

我认为,虽然蟒容易进行10**509,该误差必定是由于小数点溢出寄存器.

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

Python可以愉快地计算10**509,long因为它们具有无限的精度:

>>> type(10**509)
<type 'long'>
Run Code Online (Sandbox Code Playgroud)

但是,这个结果太大了,无法存储在float:

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

我们可以float很容易地检查最大值:

>>> import sys
>>> sys.float_info.max
1.7976931348623157e+308
Run Code Online (Sandbox Code Playgroud)

看看这个问题似乎Numpy float64具有与标准相同的值范围,float因此使用它而不是解决您的问题.

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