5
當我轉換float64
數爲float32
號碼我得到一個奇怪的結果:float64到FLOAT32轉換提供了意想不到的結果
In [22]: np.float32(20140131.0)
Out[22]: 20140132.0
這究竟是爲什麼?
當我轉換float64
數爲float32
號碼我得到一個奇怪的結果:float64到FLOAT32轉換提供了意想不到的結果
In [22]: np.float32(20140131.0)
Out[22]: 20140132.0
這究竟是爲什麼?
20140131.0不能表示爲32位整數。
用浮漂,每個範圍內時,數字均勻地間隔開。
因此,它是(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的鑄造可能會超過規則,我不完全熟悉它。
http://stackoverflow.com/questions/16963956/difference-between-python-float-and-numpy-float32 – Pavel
http://www.binaryconvert.com/result_float.html?decimal=050048049052048049051049046048 – Pavel