2017-05-14 75 views
1

使用numpy.float32Python float vs 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

浮點值在計算機上本質上是不準確的。根據https://docs.python.org/2/tutorial/floatingpoint.html,python默認的float是大多數機器上所謂的雙精度浮點數。 numpy.float32是一個單精度浮點數。這是雙精度對手是numpy.float64。這可以解釋這種情況下的差異。

通常不應使用==直接比較浮點數。您可以使用numpy.isclose來處理由非精確浮點表示造成的小錯誤。

2

的Python浮子是C雙鍵類型:documentation

浮點數在下使用通常被實現;有關運行程序的機器的浮點數的精度和內部表示的信息可在sys.float_info中找到。

因此,您正在比較32位和64位精度浮點數。下面的工作:

t = numpy.float64(.3) 
x = numpy.float64(1) 
r = numpy.float64(-.3) 
_t = t+x+r 
_t == 1