私はプログラミングが初めてです。私の最新の Python 2.7 プロジェクトでは、次のような問題に遭遇しました。
RuntimeWarning: long_scalars でオーバーフローが発生しました
誰かがこれが何を意味し、それを修正するために何ができるかを詳しく説明してもらえますか?
コードは実行されますが、警告を無視するのが良い考えかどうかはわかりません。
次のような追加プロセス中に発生します。
SomeList.append(VeryLongFormula)
同じ警告を発行する例を次に示します。
import numpy as np
np.seterr(all='warn')
A = np.array([10])
a=A[-1]
a**a
収量
RuntimeWarning: overflow encountered in long_scalars
上記の例でa
は、 is が dtypeint32
であり、 an に格納できる最大値int32
が 2**31-1 であるために発生します。であるため10**10 > 2**32-1
、累乗の結果は に格納できる数値よりも大きくなりますint32
。
np.seterr(all='warn')
numpy ですべてのオーバーフロー エラーをキャッチすることに頼ることはできないことに注意してください。たとえば、32 ビット NumPy では
>>> np.multiply.reduce(np.arange(21)+1)
-1195114496
64 ビット NumPy の場合:
>>> np.multiply.reduce(np.arange(21)+1)
-4249290049419214848
どちらも警告なしで失敗しますが、これもオーバーフロー エラーが原因です。正解はその21!等しい
In [47]: import math
In [48]: math.factorial(21)
Out[50]: 51090942171709440000L
真の浮動小数点エラー (オーバーフローするアトミック操作を実行するたびにハードウェア FPU がフラグを設定する) とは異なり、整数オーバーフロー検出を自分で実装する必要があります。スカラーに対しては行いますが、配列に対するすべてのアトミック操作を実装するには遅すぎるため、配列では行いません。
dtypes
したがって、操作がオーバーフローしないように適切なものを選択するのはあなたの負担です。