丸め誤差入門~浮動小数点数~

に公開

浮動小数点数

計算機では\pi = 3.141592653589 \dots のような桁数の大きい実数をそのまま扱えないので、浮動小数点数で近似する.
浮動小数点数の体系は4つのパラメーター (基数\beta , 桁数 n, 最小指数 L, 最大指数 U ) で特徴づけられ、計算機によって異なる.
\betan 桁の浮動小数点数」とは、これらのパラメーターに基づいて、L \le m \le Uを満たす整数m と、1 \le x_{1} \le \beta - 1, 0 \le x_{k} \le \beta - 1 \quad (\text{for } 2 \le k \le n) を満たすn個の整数 \{ x_{k} \}_{1 \le k \le n} を用いて、
x_{f} = \begin{cases}0 \\ \text{または} \\ \pm f \beta^{m}, \quad \text{with } f=\frac{x_{1}}{\beta^{1}} + \frac{x_{2}}{\beta^{2}} + \dots + \frac{x_{n}}{\beta^{n}} \end{cases}
という形式で表現できる数x_{f} のことである. 実数 x をこのような浮動小数点数 x_{f} で近似することを「丸め」という. fx_{f} の仮数部(mantissa)、mx_{f} の指数部(exponent)という.

ゼロでない浮動小数点数の最小値 F_{\min}と最大値 F_{\max}F_{\min} = \beta^{L-1}, F_{\max}= \beta^{U} (1- \beta^{-n}) と決まる. よって、計算機では、その絶対値がF_{\min} 以上 F_{\max} 以下の範囲にある実数しか扱えない. 言い換えると、実数 xF_{\min} \le |x| \le F_{\max} の範囲にない場合は、x を近似する浮動小数点数は存在しない. 特に|x| < F_{\min}
の場合をアンダーフロー、F_{\max} < |x| の場合をオーバーフローという. アンダーフローの場合は、x_{f} = 0 として処理する計算機が多い.
F_{\min} \le |x| \le F_{\max} のとき、 F_{\min} \le x_{f}^{(1)} \le |x| \le x_{f}^{(2)} \le F_{\max} を満たす浮動小数点数x_{f}^{(1)}, x_{f}^{(2)} をとれて、その中でそれぞれの最大のもの \max_{f} x_{f}^{(1)} ,最小のもの\min_{f} x_{f}^{(2)} が取れる. 適当に定めた規則に従って、 \max_{f} x_{f}^{(1)}\min_{f} x_{f}^{(2)} のどちらかを|x| の近似値として採用し、それにx の符号をつけたものを x_{f} とするのが普通である. \max_{f} x_{f}^{(1)} を採用する丸め方式を「切り捨て」, \min_{f} x_{f}^{(2)} を採用する丸め方式を「四捨五入(\beta/2 - 1\beta/2入) 」という.

実数x を 浮動小数点数 x_{f} で丸めたときに生じる誤差を「丸め誤差」という. 丸めの相対誤差 \epsilon_{x}x_{f}=x(1 + \epsilon_{x}) (x \neq 0 の場合は \frac{x_{f} - x}{x} = \epsilon_{x}) により定めると、浮動小数点体系と丸め方式によってきまる正の実数\epsilon_{M}が存在して |\epsilon_{x}| \le \epsilon_{M} が成り立つ. たとえば、\betan 桁で切り捨ての場合は\epsilon_{M} = \beta^{1-n} , \betan 桁で"\beta/2 - 1\beta/2入"の場合は\epsilon_{M} = \beta^{1-n}/2 となる. \epsilon_{M} は「マシンイプシロン」と呼ばれ、その計算機の相対誤差限界を示す重要な指標である.

Discussion