誤差による精度の低下:丸め,特殊値,アンダーフロー,およびオーバーフロー

実数が,表現可能な浮動小数点数とちょうど等しい数ではなかった場合,最も近い浮動小数点数がその表現に使用されます。丸め誤差とは,実際の実数とその最も近い浮動小数点表現との差のことです。丸められた実数を表現する浮動小数点数は,正確でない (inexact) と呼ばれます。

通常,正確でない値が生じても,計算は続けられます。ほぼすべての任意の浮動小数点演算が正確でない結果を生じさせる可能性があります。丸めモード (大きい方への丸め,小さい方への丸め,近い方への丸め,切り捨て) は,浮動小数点コントロール・ワードによって決定されます。

算術演算の結果,正確で有効な浮動小数点数 (正確に表現可能な浮動小数点数に丸められた数値を含む) が得られなかった場合,特殊値,すなわち符号付きゼロ,符号付きの無限大,NaN,または規格化されていない数値が得られます。特殊値は,特定の状況での算術演算の結果として生じます。特殊値は,プログラムを失敗させることなくそれ以降の算術演算に伝播することができ,一般に使用不可能な結果を与えます。

算術演算が正確な値を生じさせたが,その値が無効だった場合,演算はアンダーフローまたはオーバーフローを生じさせます。

正確でない値,特殊値,アンダーフロー,およびオーバーフローは浮動小数点例外です。浮動小数点コントロール・ワードを設定することで,丸めの行い方と例外の処理方法を選択することができます。コントロール・ワードの設定については「浮動小数点のステイタスおよびコントロール・ワードの設定と取得」,例外処理については「浮動小数点例外の処理」で説明しています。

丸め誤差についての詳細は,「丸め誤差」を参照してください。