簡體   English   中英

在 numpy 中從 double(float64) 轉換為 float(float32) 時的值差異

[英]Value difference when converting from double(float64) to float(float32) in numpy

當我運行簡單代碼時:

a = np.float64([20269207])
b = np.float32(a)

output 變成

a = array([20269207.])
b = array([20269208.], dtype=float32)

是什么原因導致了這種轉換前后的差異? 在什么情況下輸出會有所不同?

無法以float32 ( IEEE 754 ) 格式存儲值20269207

您可能會看到,為什么:

可以存儲值2026920620269208 它們以二進制形式表示是(參見IEEE-754 浮點轉換器):

  • 0100101110011010101001000100101120269206
  • 0100101110011010101001000100110020269208

它們的二進制 forms 相差1 ,因此2026920620269208之間的任何數字都沒有位置

根據IEEE 754的“四舍五入,接近偶數”“四舍五入,遠離零”的四舍五入規則,您的數字將四舍五入到最接近的甚至更高的數字,即數字20269208


integer 數字的輸出將不同:

  • 對於絕對值大於16,777,216的奇數,
  • 對於絕對值大於33,554,432幾乎所有數字。

筆記:

  1. 第一個數字是2^24 ,第二個是2^25
  2. “幾乎所有” - 有“不錯”的數字,例如 2 的冪,即使對於非常非常大的數字也有精確的表示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM