跳轉到

1989 William Kahan —— 浮點數的立法者#

「0.1 + 0.2 ≠ 0.3。這不是 bug,是數學的傷疤。誰替這道 傷疤制定了全球統一的法律?」

案件檔案#

項目 內容
得主 William M. Kahan (1933–)
得獎理由 浮點運算標準 IEEE 754 的主要設計者
關鍵詞 IEEE 754、捨入、特殊值

前因#

1980 年代前,每家電腦的浮點格式不同(IBM、CDC、Cray……), 同一程式在不同機器上答案相異且無法預測誤差行為。 Wilkinson(1970 案)已建立誤差分析理論,但理論需要一個 可分析的底層。Kahan 之問:什麼樣的捨入規則使誤差 可證明、可控制?

線索與推理#

線索一:IEEE 754 的設計原則(1980–85 訂定)#

格式:符號 1 位 + 指數 8 位 + 尾數 23 位(單精度)
值 = (−1)ˢ × 1.fraction × 2^(exponent−127)
關鍵決策:
  1. 隱藏首位元 → 多得一位精度
  2. 指數偏置 → 無符號比較可直接用整數比較器
  3. 捨入到最近偶數 → 長期期望誤差為零(無系統偏誤)

線索二:特殊值系統——失敗也要有語義#

Kahan 堅持納入:

值 語義 反對者當年的理由
±Inf 溢位繼續有意義 「打斷計算就好」
NaN 0/0 等無意義運算 「應觸發中斷」
denormal(次正規數) 漸進下溢 「節省電路」

漸進下溢是當年最激烈的戰場:無 denormal 時, a − b(a≈b,皆極小)可能直接跳到 0,毀掉數值穩定性。 Kahan 以 Wilkinson 式論證取勝:下溢的行為必須平滑。

線索三:可再現性與善良公民契約#

754 要求基本運算(+−×÷√)的結果唯一確定(精確結果 再捨入)。這使數值程式可跨機器再現、誤差分析可依賴 「每步至多 ε 的相對誤差」假設——數值分析(1970 案)從 描述性科學變成設計性科學。

理論評析#

機器 ε(單精度約 1.19×10⁻⁷)下的經典傷疤:

0.1 = 0.0001100110011...₂(循環)→ 無法精確表示
0.1 + 0.2 = 0.30000000000000004(雙精度)
Kahan 求和法:補償變數 c 收集每步捨去的殘餘
  c += (y − t)   (t = s + y 的捨入誤差)

不是消除誤差,而是讓誤差有秩序、可償還——本案哲學。

後果#

  • 從手機到超級電腦,一切浮點遵循 754(2008 併入十進制 與 FMA)。
  • GPU、深度學習的 bfloat16/FP8 皆為 754 精神的變體 (保留指數寬度、犧牲尾數——Kahan 原則的現代改編)。

關聯案件#

→ 1970-James-Wilkinson與向後誤差分析、1979-Kenneth-Iverson與APL符號程式語言