浮點數運算與數值表示

捨入模式

當一個真實結果嚴格落在兩個可表示機器數之間時,電腦必須挑一個——而捨入模式(rounding mode)就是它遵循的規則。多數時候你從不去想它,因為預設會做那個顯而易見、合理的選擇,但這規則有精確定義、且你可以更改,這對謹慎的數值計算與取得可重現結果都很重要。

IEEE 754 定義了四種捨入模式。預設是「最近捨入,平手取偶」:挑兩個鄰居中較近者,而當某值恰好落在正中間時,選最後一個位元為 0(偶數)者。「平手取偶」這個微調避免了單純「逢半進位」會引入的一種細微統計偏差——經過大量捨入,逢半進位會向上漂移,而取偶捨入則無淨漂移。其餘三種是定向捨入:朝向 +無窮(向上取整)、朝向 -無窮(向下取整)、以及朝向零(截斷)。定向模式是區間運算的引擎——你刻意把一邊界往上捨、另一邊界往下捨,以嚴格地把真實答案夾在中間。

模式的選擇正是使「fl(x op y) = (x op y)(1 + delta) 且 |delta| <= u」在 u = 2^(-p) 下成立的原因:只有最近捨入能達到那個最小可能界限,因為你永遠不會偏離超過半步。截斷(朝零捨入)——天真的整數轉型與某些舊硬體所用——可能差上兩倍,並系統性地把結果偏向零。所以除非你在做區間運算、或追求特定的可重現目標,否則就把模式留在最近捨入取偶——並要知道切換它可能在不同執行或不同機器間悄悄改變結果。

在平手取偶下,把平手值捨入到一個二進位位:0.5 在 0 與 1 之間平手 -> 捨入到 0(偶數),而 1.5 在 1 與 2 之間平手 -> 捨入到 2(偶數)。單純逢半進位會給出 1 與 2,把平均往上推;平手取偶則使長期平均保持無偏。

平手取偶消除了單純逢半進位的向上漂移。

最近捨入取偶之所以是預設,自有道理:它同時最小化每次運算的誤差界限與任何統計偏差。全域更改捨入模式可能破壞那些假定預設的函式庫——應局部更改並還原。

又称
rounding rulerounding directionround-to-nearest-even捨入規則舍入模式