numpy.float32
を使用しています。Python float対numpy.float32
t = numpy.float32(.3)
x = numpy.float32(1)
r = numpy.float32(-.3)
_t = t+x+r
_t == 1 # -> False
通常のPythonを使用float
。
t = .3
x = 1
r = -.3
_t = t+x+r
_t == 1 # -> True
なぜですか?
numpy.float32
を使用しています。Python float対numpy.float32
t = numpy.float32(.3)
x = numpy.float32(1)
r = numpy.float32(-.3)
_t = t+x+r
_t == 1 # -> False
通常のPythonを使用float
。
t = .3
x = 1
r = -.3
_t = t+x+r
_t == 1 # -> True
なぜですか?
浮動小数点の値は、本質的にコンピュータでは正確ではありません。 Pythonのデフォルトのfloat
は、https://docs.python.org/2/tutorial/floatingpoint.htmlに従ってほとんどのマシンで倍精度浮動小数点数と呼ばれるものです。 numpy.float32
は単精度浮動小数点です。倍精度の対応はnumpy.float64
です。これはこの場合の違いを説明することができます。
通常、浮動小数点数は==
を使用して直接比較しないでください。 numpy.isclose
を使用すると、正確ではない浮動小数点表現に起因する小さなエラーを処理できます。 documentation:
PythonのフロートはC二重型で
浮動小数点数は、通常、Cに二重使用して実装されています。プログラムが実行されているマシンの浮動小数点数の精度と内部表現に関する情報は、
sys.float_info
にあります。
したがって、32と64の精度浮動小数点数を比較しています。以下は動作します:
t = numpy.float64(.3)
x = numpy.float64(1)
r = numpy.float64(-.3)
_t = t+x+r
_t == 1
https://docs.python.org/2/tutorial/floatingpoint.html –
あなたが直接 'np.float32'オブジェクトを作成する必要はありません。複数項目配列を作る。 – hpaulj