2017-05-14 14 views
1

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 

なぜですか?

+0

https://docs.python.org/2/tutorial/floatingpoint.html –

+0

あなたが直接 'np.float32'オブジェクトを作成する必要はありません。複数項目配列を作る。 – hpaulj

答えて

1

浮動小数点の値は、本質的にコンピュータでは正確ではありません。 Pythonのデフォルトのfloatは、https://docs.python.org/2/tutorial/floatingpoint.htmlに従ってほとんどのマシンで倍精度浮動小数点数と呼ばれるものです。 numpy.float32は単精度浮動小数点です。倍精度の対応はnumpy.float64です。これはこの場合の違いを説明することができます。

通常、浮動小数点数は==を使用して直接比較しないでください。 numpy.iscloseを使用すると、正確ではない浮動小数点表現に起因する小さなエラーを処理できます。 documentation

2

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 
関連する問題