IEEE 754 標準
/ EYE-triple-E seven-fifty-four /
在 1970 年代,每家電腦廠商都有自己的浮點數格式,於是同一支程式在不同機器上可能給出不同答案,要對數值軟體證明任何性質幾乎是奢望。IEEE 754 於 1985 年首次發布、其後多次修訂,正是終結這場混亂的條約:它精確規定浮點數如何儲存、運算如何捨入、以及例外情況如何表現。如今幾乎每顆 CPU、GPU 與每種語言都遵守它,這正是你的筆電與一台超級電腦能逐位元一致的原因。
此標準固定了位元配置(尤其是 binary32「單精度」與 binary64「雙精度」)、隱含領先位元與指數偏移,以及特殊編碼:帶號零、用於漸進下溢的次正規數、兩個無窮,以及 NaN(非數,Not a Number)。關鍵在於它強制基本運算須「正確捨入」:加、減、乘、除與開平方必須回傳精確捨入的結果,彷彿先以無限精度計算、再一次性捨入到最接近的可表示值(平手時取偶數)。它也定義了多種捨入模式與一組例外旗標(無效、上溢、下溢、除以零、不精確)。
這正是捨入誤差分析得以成為一門科學、而非民間傳說的原因。由於每台合規機器以相同方式捨入,標準模型 fl(x op y) = (x op y)(1 + delta) 且 |delta| <= u 在已知的 u 下成立,結果可跨硬體重現,特殊值也可預測地傳播(Inf 與 NaN 會流經整個計算,而不會讓它當掉)。此標準並不保證長計算是準確的——只保證每一個單步都無懈可擊;用這些可靠的磚塊組裝出準確的演算法,仍是你的責任。
在任何 IEEE-754 機器上計算 sqrt(2.0),你都會得到完全相同的 64 位元值 1.4142135623730951...,因為標準要求 sqrt 必須正確捨入。同樣地,1.0/0.0 會給出 +Inf(並設置除以零旗標)而非當掉,0.0/0.0 則給出 NaN。
一紙條約,處處位元一致——並有優雅的特殊值處理。
IEEE 754 保證 +、-、*、/、sqrt 的正確捨入,但「不」保證 sin、exp 等超越函數(即「製表者困境」);這些函數在不同函式庫間可能在最後一個位元上有出入。