2014-05-20 71 views
5

當我轉換float64數爲float32號碼我得到一個奇怪的結果:float64到FLOAT32轉換提供了意想不到的結果

In [22]: np.float32(20140131.0) 
Out[22]: 20140132.0 

這究竟是爲什麼?

+0

http://stackoverflow.com/questions/16963956/difference-between-python-float-and-numpy-float32 – Pavel

+3

http://www.binaryconvert.com/result_float.html?decimal=050048049052048049051049046048 – Pavel

回答

7

20140131.0不能表示爲32位整數。

32 bit float

64 bit float

用浮漂,每個範圍內時,數字均勻地間隔開。

因此,它是(1 + M)* 2 ^(E)

所以20140131.0爲2^24至2^25範圍內。該範圍內有16,777,216個數字,但只有8,388,608個浮點數。所以你只能代表偶數。

由於在32位浮點數中,尾數只有23位,整數只能表示爲2^24。以上,epsilon > 1。其中epsilon是兩個相鄰浮點數之間的差異。

至於蟒浮筒,我相信他們是這樣工作的:

浮標在python通常不是32位,或64位,所以這不是一個問題。長度會自動調整。購買你將它們投射到特定類型,所以你會看到缺乏解決方案。對於64位整數,尾數有52位,所以直到2^53以上纔會看到這個問題。

此外,數字四捨五入到最接近的浮點數的方式通常以系統範圍的方式定義(我認爲),但python的鑄造可能會超過規則,我不完全熟悉它。