浮點數計算機
將十進位數轉換為 IEEE 754 二進位表示並分析精度。
輸入任意十進位數並選擇精度格式,即可查看其 IEEE 754 二進位表示、指數、尾數與捨入誤差。
浮點數計算機
將十進位數轉換為 IEEE 754 二進位表示並分析精度。
範例
點擊下方任一按鈕即可載入一個知名的數值常數。
| 十進位輸入 | 精度與說明 | 意義 |
|---|---|---|
| 3.141592653589793(雙精度) | 符號: 0 · 指數: 1 · 精確位數: ~15 | π——無理數,儲存時帶有極小捨入誤差 |
| 0.1(單精度) | 符號: 0 · 儲存值: 0.100000001490116 · 誤差: ~1.49e-9 | 經典的捨入誤差範例 |
| 2.718281828459045(雙精度) | 符號: 0 · 指數: 1 · 精確位數: ~15 | 歐拉常數 e |
| 1.23e-10(單精度) | 符號: 0 · 規格化 · 極小的正數 | 測試單精度下的小數精度 |
關於浮點數計算機
浮點數計算機可以將十進位數轉換為 IEEE 754 二進位浮點表示,並顯示完整的位元級拆解,包括符號位、指數與尾數。理解浮點表示法,是電腦科學家、軟體工程師、數值分析人員,以及所有在精度敏感場景中使用電腦的人都必須掌握的基礎知識。
IEEE 754 標準由美國電機電子工程師學會於 1985 年發布,並於 2008 年修訂,定義了幾乎所有現代處理器與程式語言(包括 C、C++、Java、Python 和 JavaScript)所使用的浮點運算格式。該標準主要規定兩種格式:單精度(32 位元)與雙精度(64 位元)。
32 位元單精度浮點數由三個欄位組成:1 個符號位、8 個指數位與 23 個尾數(有效數)位。符號位為 0 代表正數,1 代表負數。指數以偏置 127 儲存,表示實際指數等於儲存值減去 127,因此可以用無號整數同時表示正負指數。尾數儲存規格化有效數的小數位,並帶有一個隱含的前導 1(隱藏位),因此可多提供 1 位有效精度。
64 位元雙精度浮點數使用 1 個符號位、11 個指數位(偏置 1023)與 52 個尾數位,所能提供的十進位有效位數大約為 15–17 位,而單精度只有 6–7 位。雙精度是大多數程式語言中的預設浮點型別。
一個關鍵事實是,許多看似簡單的十進位數(例如 0.1)無法在二進位浮點中被精確表示。十進位 0.1 的二進位形式是無限循環小數 0.0001100110011...,而浮點數的位數是固定的,因此必須截斷以符合 23 位或 52 位尾數。這種截斷會引入極小的捨入誤差,也正因如此,在大多數程式語言中,0.1 + 0.2 並不會精確等於 0.3。這個計算機會顯示你輸入的任意十進位數的精確儲存值與捨入誤差,因此它既是除錯工具,也是學習數值運算的極佳助手。
如何使用這個計算機
- 選擇精度格式——單精度(32 位元)適合嵌入式或 GPU 場景,雙精度(64 位元)適合科學計算。
- 在輸入框中輸入任意十進位數,也支援科學記號(例如 1.23e-10 或 6.022e23)。
- 點擊「轉換」即可查看完整的 IEEE 754 分解:符號位、指數位(含偏置值與實際值)以及尾數位。
- 查看儲存值——也就是電腦實際使用的精確十進位數——並將其與你的輸入比較,觀察是否有捨入誤差。
- 使用範例按鈕,查看 π、e 或 0.1 等知名常數在二進位浮點中的表示方式。
常見問題
為什麼 0.1 不能在浮點數中被精確表示?
十進位 0.1 在二進位中是無限循環小數(0.000110011001100...),就像 1/3 在十進位中是循環小數一樣。由於浮點數的位數固定,這個小數必須被截斷,進而引入極小的捨入誤差。這也是為什麼在大多數語言中,0.1 + 0.2 的結果約等於 0.30000000000000004,而不是精確的 0.3。
指數欄位中的偏置值是什麼?
偏置值是在儲存之前加到實際指數上的固定偏移量。單精度使用 127,雙精度使用 1023。如果實際指數是 3,那麼單精度的儲存值就是 3 + 127 = 130。透過這種帶偏置的表示法,可以在只使用無號整數儲存的情況下表示從 −126 到 +127(單精度)或從 −1022 到 +1023(雙精度)的指數。
什麼是隱藏位?
對於規格化浮點數,尾數的最高位永遠是 1,但不會被儲存——它是隱含的。這個「隱藏位」或「隱式位」實際上讓單精度擁有 24 位尾數精度(23 位儲存 + 1 位隱藏位),讓雙精度擁有 53 位(52 位儲存 + 1 位隱藏位)。接近 0 的非規格化數則隱含前導 0。
IEEE 754 的特殊值有哪些?
IEEE 754 定義了幾種特殊值:正零與負零(透過符號位區分)、正無窮與負無窮(所有指數位都為 1,所有尾數位都為 0),以及 NaN——不是一個數(所有指數位都為 1,且至少有一個尾數位為 1)。這些值可以優雅地處理溢位、除以零與未定義運算,而不會讓程式崩潰。
什麼時候該使用單精度或雙精度?
在科學計算、財務計算,以及任何需要超過 7 位十進位精度的應用中,請使用雙精度(64 位元)。當記憶體或效能受限時,可以使用單精度(32 位元)——GPU 處理單精度浮點數通常更快,行動端與嵌入式系統也常因效率而偏好 32 位元。單精度中的捨入誤差在迭代演算法中可能會顯著累積。
如何在程式碼中避免浮點精度錯誤?
在做相等比較時,請使用容差(epsilon),而不是直接判斷完全相等:用 |a − b| < 1e-9 代替 a === b。對於財務計算,可以考慮使用整數運算(例如用分為單位儲存金額)或專門的十進位函式庫。對於科學計算,可使用 Kahan 求和等補償求和演算法來減少大規模累加中的捨入誤差。