M=N**2
ここで、N
は整数であると考えています。 numpy.sqrt(M)
はfloat(実際にはnumpy.float64)を返します。`int(numpy.sqrt(N))`の安全性
私が原因int(numpy.sqrt(M))
はN-1
になり、その場合、数値精度の問題にN-10**(-16)
、たとえば、それは返す場合があるかもしれないことを想像できます。
しかし、私のテストではN==numpy.sqrt(M)
にはTrue
が返されているので、この近似は起こっていないようです。
M
が完璧な広場である場合、int(numpy.sqrt(M))
は確かに正確であると仮定することはできますか?もしそうなら、ボーナスのために、バックグラウンドで何が起こっているのですか?あなたが使用することができ1E-15で整数を見逃さないようにするに
いいえ、それはのfloat64であれば、それはどのおよそ〜20ヶ所に正しくなります*たくさんありますが、完璧ではありません。 int sqrtを使用する方法があります。 –
http://stackoverflow.com/questions/15390858/weird-behaviour-of-np-sqrt-for-large-integersおよびhttp://stackoverflow.com/questionsを参照してください。/15390807/integer-square-root-in-python – kennytm