使用numpy.float32
。Python 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
爲什麼?
使用numpy.float32
。Python 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
爲什麼?
浮點值在計算機上本質上是不準確的。根據https://docs.python.org/2/tutorial/floatingpoint.html,python默認的float
是大多數機器上所謂的雙精度浮點數。 numpy.float32
是一個單精度浮點數。這是雙精度對手是numpy.float64
。這可以解釋這種情況下的差異。
通常不應使用==
直接比較浮點數。您可以使用numpy.isclose
來處理由非精確浮點表示造成的小錯誤。
的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
https://docs.python.org/2/tutorial/floatingpoint.html –
你並不需要做一個'np.float32'直接對象。製作一個多項目數組。 – hpaulj