相対誤差
この章の目標
相対誤差の定義と性質を理解し、浮動小数点数との本質的な関係と、四則演算での誤差伝播法則(特に桁落ちの危険性)を学ぶ。
1. 定義
相対誤差(Relative Error)とは、絶対誤差を真値の絶対値で割った無次元量である。
パーセント誤差として表す場合は $100 \times E_{\text{rel}}$ (%) とする。
相対誤差の性質
- 無次元量(単位をもたない)
- スケール不変: $x$ を定数倍しても相対誤差は変わらない
- 真値がゼロのとき定義できない
- 浮動小数点演算との相性がよい
相対誤差は「誤差が真値の何割に相当するか」を示すため、異なるスケールの量を比較する際に適している。例えば、体重と身長の測定精度を比較するには相対誤差を用いるべきである。
2. 浮動小数点数との関係
IEEE 754 浮動小数点数は、数を $\pm m \times 2^e$($m$ は仮数部、$e$ は指数部)の形で表現する。この表現形式の本質的な特徴は、表現精度が数の大きさに比例することである。
任意の実数 $x \neq 0$ を最近接の浮動小数点数 $\text{fl}(x)$ に丸めたとき、
$$\text{fl}(x) = x(1 + \delta), \quad |\delta| \le \varepsilon_{\text{mach}}$$が成り立つ。ここで $\varepsilon_{\text{mach}}$ は計算機イプシロン(倍精度で $\approx 1.11 \times 10^{-16}$)である。
この式は「浮動小数点数の表現誤差の相対誤差は常に計算機イプシロン以下である」ことを意味する。これが相対誤差と浮動小数点数の相性がよい根本的な理由である。
3. 相対誤差の伝播法則
$\tilde{x} = x(1 + \epsilon_x)$, $\tilde{y} = y(1 + \epsilon_y)$ とする($\epsilon_x$, $\epsilon_y$ は相対誤差)。
乗法
$$\tilde{x}\tilde{y} = xy(1 + \epsilon_x)(1 + \epsilon_y) \approx xy(1 + \epsilon_x + \epsilon_y)$$したがって、乗法の相対誤差は各因子の相対誤差の和に近い。
除法
$$\frac{\tilde{x}}{\tilde{y}} \approx \frac{x}{y}(1 + \epsilon_x - \epsilon_y)$$除法でも相対誤差は加算的に伝播する。
加法・減法
$$\tilde{x} + \tilde{y} = (x + y) + x\epsilon_x + y\epsilon_y$$したがって結果の相対誤差は
$$\epsilon_{x+y} \approx \frac{x}{x+y}\epsilon_x + \frac{y}{x+y}\epsilon_y$$$x \approx -y$(ほぼ等しい値の減算)のとき $|x+y| \ll |x|$ となり、相対誤差が爆発的に増大する。これが桁落ちである。
4. 有効数字との関係
近似値 $\tilde{x}$ が $n$ 桁の有効数字をもつことと、相対誤差が $5 \times 10^{1-n}$ 以下であることはおおよそ等価である。
$$E_{\text{rel}} \le 5 \times 10^{1-n} \quad \Leftrightarrow \quad \text{約 } n \text{ 桁の有効数字}$$倍精度浮動小数点数(53ビット仮数部)は約15--16桁の有効数字に相当する。
5. 相対誤差の注意点
- 真値がゼロの場合: $x = 0$ のとき相対誤差はゼロ除算となり定義できない。この場合は絶対誤差を使用するか、$|x - \tilde{x}| / \max(|x|, \delta)$ のように修正した定義を用いる。
- 真値が不明の場合: 真値が未知のときは、最良の近似値を参照値とした近似的な相対誤差 $|x_n - x_{n-1}| / |x_n|$ を用いることが多い。
- 相対誤差の対称性: $|x - \tilde{x}|/|x|$ と $|x - \tilde{x}|/|\tilde{x}|$ は一般に異なる。前者を真の相対誤差、後者を近似相対誤差と呼ぶ。
6. 計算例
例1: 物理定数の近似
光速 $c = 299\,792\,458\;\text{m/s}$ に対する近似値 $\tilde{c} = 3.0 \times 10^8\;\text{m/s}$ の相対誤差:
$$E_{\text{rel}} = \frac{|299\,792\,458 - 300\,000\,000|}{299\,792\,458} = \frac{207\,542}{299\,792\,458} \approx 6.92 \times 10^{-4} \approx 0.069\%$$例2: 桁落ちによる相対誤差の増大
$x = 1.000\,000\,1$, $y = 1.000\,000\,0$ のとき、差 $x - y = 1.0 \times 10^{-7}$ を計算する。
各値の相対誤差が $\epsilon = 10^{-15}$(倍精度の丸め誤差)であるとする。
結果の絶対誤差は最大 $|x|\epsilon + |y|\epsilon \approx 2 \times 10^{-15}$ であり、結果の相対誤差は
$$\frac{2 \times 10^{-15}}{10^{-7}} = 2 \times 10^{-8}$$元の相対誤差 $10^{-15}$ から7桁も悪化している。これが桁落ちの典型例である。
7. よくある質問
Q1. 相対誤差とは何ですか?
絶対誤差を真値の絶対値で割った無次元量であり、真値に対する誤差の割合を表す。パーセントで表す場合は100倍する。スケールの異なる量の精度を比較するのに適している。
Q2. 相対誤差はなぜ浮動小数点数と相性がよいのですか?
浮動小数点数は仮数部と指数部で数を表現するため、表現精度は数の大きさに比例する。したがって、丸め誤差の相対誤差は常に計算機イプシロン程度に保たれる。
Q3. 真値がゼロのとき相対誤差はどう扱いますか?
$x = 0$ のとき相対誤差はゼロ除算となり定義できない。絶対誤差を使用するか、$|x - \tilde{x}| / \max(|x|, \delta)$ のように修正した定義を用いる。
8. 参考資料
- Wikipedia「誤差」(日本語版)
- Wikipedia「Approximation error」(英語版)
- Wikipedia「Relative change and difference」(英語版)
- D. Goldberg, "What Every Computer Scientist Should Know About Floating-Point Arithmetic," ACM Computing Surveys, vol. 23, no. 1, pp. 5--48, 1991.
- N. J. Higham, Accuracy and Stability of Numerical Algorithms, 2nd ed., SIAM, 2002.