浮點數資料表示 (Floating-Point Data Representation)
重點總覽 (Overview)
IEEE-754 把一個浮點數值拆成三個位元群組,並用一條公式還原成數值。本筆記只聚焦「位元佈局 + 正規化尾數 + 指數超量編碼」三件事;可表示數值、denormalization、NaN/∞、rounding 誤差請見 24-Numerical-Considerations/02-Representable-Numbers-Precision-and-Accuracy。
| 欄位 / 概念 | 符號 | 作用 | 關鍵規則 |
|---|---|---|---|
| Sign | S | 正負號 | S=0 正、S=1 負,值乘上 (-1)^S |
| Exponent | E | 決定動態範圍 (range) | excess/biased 編碼,bias = 2^(e-1) - 1 |
| Mantissa | M | 決定精度 (precision) | 正規化為 1.M,省略前導 1.,m-bit 等效 (m+1)-bit |
| 通用公式 (A.1) | — | 還原數值 | value = (-1)^S × 1.M × 2^(E - bias) |
記住分工:E 管範圍 (range)、M 管精度 (precision)、S 管正負號。多一個 E bit → 範圍變大;多一個 M bit → 誤差減半 (精度加倍)。
IEEE-754 位元佈局 (IEEE-754 Bit Layout)
IEEE-754 標準讓所有廠商對浮點資料的「表示」與「運算行為」一致。一個 (S, E, M) 位元組合 (除少數例外) 唯一對應一個數值:
書中用一個假想 6-bit 格式來示範編碼挑戰:1-bit S + 3-bit E + 2-bit M。
6-bit 教學格式 (1 S, 3 E, 2 M):
┌───┬───────────┬───────┐
│ S │ E (3) │ M (2) │ bias = 2^(3-1)-1 = 3 (excess-3)
└───┴───────────┴───────┘
↑ ↑ ↑
正負號 超量編碼 正規化 1.M (省略 "1.")
真實 IEEE 格式:
single (32-bit): [ S | E:8 | M:23 ] bias = 2^7 - 1 = 127
double (64-bit): [ S | E:11 | M:52 ] bias = 2^10 - 1 = 1023
| 格式 | S | E (bits) | M (bits) | bias | 相對精度 |
|---|---|---|---|---|---|
| 教學 (6-bit) | 1 | 3 | 2 | 3 | — |
| single | 1 | 8 | 23 | 127 | 基準 |
| double | 1 | 11 | 52 | 1023 | 多 29 個 M bits → 最大誤差降為 single 的 1/2^29 |
- 十進位 vs 二進位下標:書中用
D表十進位、B表二進位。例如0.5D(= 5×10⁻¹) 等於0.1B(= 1×2⁻¹)。 - S 的解讀很直接;真正複雜的是 M (正規化) 與 E (超量編碼),下面分別說明。
當 E 全為 1 (11…1) 或全為 0 (00…0) 時,(S,E,M) 不再套用 Eq. A.1 — 這些是 NaN/∞/denormalized/0 的保留樣式。本筆記不展開,詳見 24-Numerical-Considerations/02-Representable-Numbers-Precision-and-Accuracy。
正規化尾數 (Normalized Representation of M)
Eq. A.1 強制把尾數視為 1.M 形式,目的是讓每個浮點數的位元樣式唯一。
以 0.5D 為例,在 1.M 限制下只有一種寫法:
同一個 0.5D 的多種寫法,只有 1.M 形式合法:
1.0B × 2^-1 ✅ 符合 1.M (normalized)
0.1B × 2^0 ❌ 不是 1.xx
10.0B × 2^-2 ❌ 不是 1.xx
- 滿足此限制的數稱為 normalized numbers (正規化數)。
- 因為尾數一定是
1.XX,前導的1.可以省略不存。所以0.5的 2-bit 尾數存成00(由1.00去掉1.得來)。 - 白賺一個 bit:省略隱含的
1.讓 2-bit 尾數等效於 3-bit。一般規則:IEEE 的 m-bit 尾數 = 等效 (m+1)-bit 尾數。
「隱含前導 1」是免費的精度。正因如此,IEEE 才需要 denormalized 與保留樣式來處理 1.M 表示不了的 0 與極小數 (見 sibling note 02)。
指數的超量編碼 (Excess / Biased Encoding of E)
E 的位元數決定可表示數值的範圍:大的正 E → 極大值 (E=64 → 介於 2⁶⁴≈10¹⁸ 與 2⁶⁵);大的負 E → 極小分數 (E=−64 → 介於 2⁻⁶⁴≈10⁻¹⁸ 與 2⁻⁶³)。這就是浮點數比整數格式有更廣動態範圍的原因。
IEEE 採用 excess / biased (超量/偏移) 編碼:把 bias = 2^(e-1) - 1 加到指數的 two's complement 表示上,形成 excess 表示。
以 3-bit 指數 (e=3) 為例,bias = 2^(3-1) - 1 = 3 (= 011B),稱為 excess-3:
excess-3 編碼 (3-bit E),依無號值由小到大排序:
stored code 2's-complement 實際指數值
000 011 -3
001 100 -2
010 101 -1
011 110 0
100 111 1
101 000 2
110 001 3
111 (reserved) ← 全 1 保留樣式
| 特性 | 超量編碼 (excess) | 直接 two's complement |
|---|---|---|
| 比較硬體 | unsigned comparator 即可 (小、快) | 需 signed comparator (大、慢) |
| 單調性 | code 隨數值單調遞增 | 符號位破壞單調順序 |
| 範例 | 001(−2) < 100(1) ✅ 直接比對 |
需先解讀符號 |
核心優點:超量編碼後,用無號比較器就能正確比較有號指數 — 因為 bit pattern 隨真實值單調遞增。例如比較 001 與 100,無號上 001 < 100,對應的真值 −2 < 1 也成立。硬體上無號比較器更小更快,是很理想的性質。
- 保留樣式:全 1 (
111) 被保留。原因:0 加上等量的正、負值會得到奇數個樣式;把111算進正或負都會讓正負數量不平衡,所以 IEEE 把它留作特殊用途 (∞ / NaN,見 note 02)。
完整範例 — 用 6-bit 格式表示 0.5D:
0.5D = 1.0B × 2^-1
S = 0 (正)
E = -1 → excess-3 code = 010
M = (1.)00 → 存 00
⇒ 0 | 010 | 00 = 001000B
bias 公式用的是 2^(e-1) - 1 (e = 指數位元數),不是 2^e 也不是 2^(e-1)。3-bit → bias 3、8-bit → bias 127、11-bit → bias 1023。算錯 bias 會讓整個指數偏移、數值全錯。
考試/面試重點 (Exam / Test Patterns)
| 情境 / 關鍵字 | 答案 / 技巧 |
|---|---|
| 「還原浮點數值」 | value = (-1)^S × 1.M × 2^(E - bias),bias = 2^(e-1) - 1 |
| 「為何尾數是 1.M 不是任意 0.xx」 | 保證唯一表示 + 隱含前導 1 → m-bit 等效 (m+1)-bit,白賺 1 bit 精度 |
| 「single/double 的 E、M 位數」 | single: 8/23 (bias 127);double: 11/52 (bias 1023) |
| 「double 比 single 精度高多少」 | 多 29 個 M bits → 最大表示誤差降為 1/2^29 |
| 「為何用 excess 而非 two's complement 存 E」 | 可用 unsigned comparator 比較有號指數 (單調遞增),硬體更小更快 |
| 「3-bit 指數的 bias 是多少」 | 2^(3-1) - 1 = 3 (excess-3) |
| 「全 1 / 全 0 指數樣式」 | 保留樣式 (∞/NaN/denorm/0),不套 Eq. A.1 → 屬 note 02 |
| 「多一個 M bit vs 多一個 E bit」 | M bit → 精度 (誤差減半);E bit → 動態範圍變大 |
「0.5D 的 6-bit 編碼」 |
001000 (S=0, E=010, M=00) |
Related Notes
- 24-Numerical-Considerations/02-Representable-Numbers-Precision-and-Accuracy
- 24-Numerical-Considerations/03-Algorithm-Considerations-and-Numerical-Stability
- 17-Iterative-MRI-Reconstruction/04-Hardware-Trig-Accuracy-and-Performance-Tuning
- 10-Reduction/01-Reduction-Fundamentals-and-Simple-Kernel
- 22-Advanced-Practices-And-Future-Evolution/03-Memory-Bandwidth-and-Compute-Throughput