丸め誤差
実数を浮動小数点で表すときに生じる誤差。
1 回の演算では相対誤差が機械イプシロン以下に収まる。 問題は、それが積み重なったときの振る舞い。
蓄積の仕方#
回の演算で誤差が になるとは限らない。
- 良い場合 … 誤差が打ち消し合い 程度
- 悪い場合 … 桁落ちで一気に精度を失う
総和での対策#
素朴な総和は誤差が蓄積する。Kahan の補正総和は、 失われた下位ビットを別変数に保持して足し戻す。
NumPy の sum が対分割(pairwise summation)を使っているのも同じ動機で、
に抑えている。
実務での現れ方#
参考文献#
- David Goldberg. What Every Computer Scientist Should Know About Floating-Point Arithmetic. ACM Computing Surveys 23(1), 1991. https://doi.org/10.1145/103162.103163
- Nicholas J. Higham. Accuracy and Stability of Numerical Algorithms, 2nd ed. SIAM, 2002. https://doi.org/10.1137/1.9780898718027