数値解析 では、 1 つまたは複数のガード桁を使用して丸め誤差の量を減らすことができます。
例
長い複数ステップの計算の最終結果を、小数点以下N桁に安全に丸めることができると仮定します。つまり、この最終丸めによって生じる丸め誤差は、全体の不確実性にほとんど影響を与えません。
ただし、計算の中間ステップを同じ桁数に丸めるのは安全ではない可能性が非常に高いです。丸め誤差が蓄積される可能性があることに注意してください。中間計算でM 桁の小数点が使用される場合、 M−N 桁のガード桁があると言います。
コンピューティング
ガード桁は、ほとんどのコンピュータ システムの 浮動小数点演算でも使用されます。
例として、減算 を考えてみましょう。ここで、積表記は、表現の指数が2 の累乗として与えられ、仮数が2 進小数点の後の 3 ビットで与えられる 2 進浮動小数点表現を示します。減算を計算するには、これらの数値の形式を変更して、同じ指数を持つようにし、積表記を展開したときに結果の数値の 2 進小数点が互いに並ぶようにする必要があります。2 番目のオペランドを の位置にシフトすると、2 進小数点の後の 4 番目の桁が得られます。これにより、最初のオペランドに余分な桁 (ガード桁) を追加して、減算を の形式にする必要が生じます。
この操作を実行すると、結果としてまたはが得られます。
ガード桁を使用しない場合、減算は 3 ビットの精度でのみ実行され、 またはとなり、正しい結果の 2 倍になります。したがって、この例では、ガード桁を使用することで、より正確な結果が得られました。
浮動小数点の丸めによって発生するエラーの例を次のCコードに示します。
int main (){ double a ; int i ;
a = 0.2 ; a += 0.1 ; a -= 0.3 ;
i = 0 ; a < 1.0 ; i ++ )の場合、a += a ;
printf ( "i=%d, a=%f \n " , i , a );
0 を返す; }
プログラムは終了しないはずです。しかし、出力は次のようになります。
i=54、a=1.000000
別の例は次のとおりです。
2つの数字を取ります:
そして
最初の数を2 番目の数と同じ乗にします。
2 つの数値を加算すると次のようになります。
0.0256*10^2 2.3400*10^2 + ____________ 2.3656*10^2
2 番目の数値 (つまり) を 2 つの で埋め込んだ後、その直後のビットはガード桁になり、その直後のビットは丸め桁になります。丸め後の結果はとは対照的に、余分なビット (ガード ビットと丸めビット) がなく、つまり のみを考慮した値になります。したがって、誤差は です。
参照
参考文献
- Forman S. Acton . Numerical Methods that Work、アメリカ数学会 (1997 年 8 月)。
- Higham, Nicholas J. 『数値アルゴリズムの精度と安定性』、ワシントン DC: Society for Industrial & Applied Mathematics、2002 年。
