76

私はプログラミングが初めてです。私の最新の Python 2.7 プロジェクトでは、次のような問題に遭遇しました。

RuntimeWarning: long_scalars でオーバーフローが発生しました

誰かがこれが何を意味し、それを修正するために何ができるかを詳しく説明してもらえますか?

コードは実行されますが、警告を無視するのが良い考えかどうかはわかりません。

次のような追加プロセス中に発生します。

SomeList.append(VeryLongFormula)
4

2 に答える 2

75

同じ警告を発行する例を次に示します。

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

numpy 開発者の Robert Kern 氏によると

真の浮動小数点エラー (オーバーフローするアトミック操作を実行するたびにハードウェア FPU がフラグを設定する) とは異なり、整数オーバーフロー検出を自分で実装する必要があります。スカラーに対しては行いますが、配列に対するすべてのアトミック操作を実装するには遅すぎるため、配列では行いません。

dtypesしたがって、操作がオーバーフローしないように適切なものを選択するのはあなたの負担です。

于 2011-09-26T19:02:38.840 に答える