警戒位

在數值分析中 ， 可以使用一個或多個警戒位來減少舍入誤差 。 如果說一個許多步驟計算的最終結果可以安全地舍入到 N 位小數 ， 那麼 ， 最終的舍入操作引入的舍入誤差對整體不確定性的影響可以忽略不計 。 然而 ， 在中間步驟舍入到同樣多的位數很可能是不安全的 。 因爲舍入誤差可以累積 。 如果中間步驟中用了 M 位小數 ， 那麼就有 M − N 個警戒位 。 在多數計算系統中 ， 浮點運算都會用到警戒位 。 例如 我們必須對齊它們的位數 。 也就是說我們必須向第一個操作數額外添加一位 ， 即警戒位 。 因此我們有 ， 計算可得 或. 如果不用警戒位的話 ， 就是 ， 計算得到 或 。 產生了100 % 的相對誤差 。 由此可見警戒位的重要性 。 以下一段 C 代碼說明了一個由浮點舍入導致的錯誤 ： int main { double a; int i; a = 0.2; a + = 0.1; a - = 0.3; for ( i = 0; a < 1.0; i + + ) a + = a; printf ( " i = % d, a = % f \ n ", i, a ); return 0; } 看上去程序不會終止 。 然而輸出是: i = 54, a = 1.000000 另一個例子是 ： 給定2個數字 ： 和 。 我們使第一個數字中 的冪次和第二個數字一致 ， 即 ： 。 那麼兩個數字的加和是 ： 0.0256 * 10 ^ 2 2.3400 * 10 ^ 2 + ____________ 2.3656 * 10 ^ 2 第二個數 在填充兩個 之後 ， 後面的位數即警戒位 ， 再後面的是舍入位 。 舍入之後的結果是 而非 ， 如果沒有多餘的位 （ 警戒位和舍入位 ） 的話 ， 即僅考慮 。 誤差是 。