1

我有一个返回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)

错误是一样的。我是在声明float64错误吗?

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

4

1 回答 1

7

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

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

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

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

但是,此结果太大而无法存储在 a 中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

这个问题似乎 Numpyfloat64具有与标准相同的值范围,float因此使用它并不能解决您的问题。

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

于 2012-06-20T08:36:39.573 回答