1

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値を返す関数です。値の「リスト」が必要です。

4

1 に答える 1

7

Pythonは簡単に10**509を実行しますが、このエラーは小数点がレジスターをオーバーフローしていることが原因であると考えられます。

問題は「小数点がオーバーフローする」ことではなく、使用しているデータ型が原因です。

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

この質問を見ると、Numpyfloat64の値の範囲は標準と同じであるfloatため、代わりにそれを使用しても問題は解決しません。

代わりに、 mpmathbigfloatなどの任意精度の浮動小数点を提供するサードパーティモジュールの1つを使用する必要があります。

于 2012-06-20T08:36:39.573 に答える