資料表示法與數字系統

浮點數(floating point)

浮點數是電腦用固定且不算多的位元,去儲存帶有小數部分、或跨越巨大範圍的數——從原子的大小到星系之間的距離。訣竅與科學記號相同,那裡 0.0000123 寫成 1.23 乘 10^-5、4500000 寫成 4.5 乘 10^6。你儲存幾個有效位數,並另外存一個指數,說明小數點該放哪裡。那個點可以「浮動」到任何尺度,名稱正由此而來。

一個浮點數由三部分組成:符號(正或負)、有效位數(也叫尾數,即那些有效數字),以及指數(一個二的次方,說明把點往哪邊滑、滑多遠)。其值大致是符號乘以有效位數乘以 2^指數。這與定點數對比,定點數的二進位點固定坐在某一欄——定點數較簡單、對金錢類小數精確,但它無法像浮點數那樣橫跨巨大範圍。浮點數以精確換取觸及範圍:它涵蓋極廣的動態範圍,但大多數值只是近似儲存。

那種近似是最重要該理解的一件事,而且不斷讓新手吃虧。因為有效位數只有有限多個位元,許多普通的十進位小數無法精確儲存——最著名的就是 0.1,它在二進位裡是無止盡的循環分數,正如 1/3 在十進位裡無止盡。所以 0.1 + 0.2 不會剛好得出 0.3,而是得出 0.30000000000000004。隨之而來的誠實規則是:絕不要對浮點數測試精確相等(改為比較它們是否夠接近)、要預期能在數百萬次運算中累積的微小捨入誤差,並記得浮點數是實數的近似、不是實數本身。

十進位的 0.1 沒有精確的二進位表示,所以電腦儲存它能存的最接近的值。這就是為什麼在典型的 64 位元浮點裡,0.1 + 0.2 算出 0.30000000000000004 而不是剛好的 0.3。

浮點數是實數的近似,所以 0.1 + 0.2 不剛好等於 0.3。

絕不要用精確相等比較浮點值;改測差距是否落在一個小容差內。捨入誤差雖微小卻真實,並能在許多次運算中累積。

又称
floating-point numberreal number approximation浮點