丸め誤差

丸め誤差

執筆済 数学数値計算

実数を浮動小数点で表すときに生じる誤差。

fl(x)=x(1+δ),|δ|ε

1 回の演算では相対誤差が機械イプシロン以下に収まる。 問題は、それが積み重なったときの振る舞い。

蓄積の仕方#

n 回の演算で誤差が 𝒪(nε) になるとは限らない。

  • 良い場合 … 誤差が打ち消し合い 𝒪(nε) 程度
  • 悪い場合桁落ちで一気に精度を失う

総和での対策#

素朴な総和は誤差が蓄積する。Kahan の補正総和は、 失われた下位ビットを別変数に保持して足し戻す。

誤差:𝒪(nε)𝒪(ε)

NumPy の sum が対分割(pairwise summation)を使っているのも同じ動機で、 𝒪(lognε) に抑えている。

実務での現れ方#

  • 共分散行列の対称性が崩れる → 明示的に (C+C)/2 とする
  • 確率の積がアンダーフローする → 対数を取る
  • 反復計算が収束しない → 収束判定に絶対誤差ではなく相対誤差を使う

参考文献#

ノート一覧を閉じる