桁落ち

桁落ち

執筆済 数学数値計算

近い値どうしを引き算すると、有効桁数が激減する現象。 catastrophic cancellation。

例#

1.23456789 と 1.23456700(有効 9 桁)を引くと 0.00000089。 有効桁は 2 桁しか残らない。 上位の一致していた桁が消え、下位の誤差だけが残る。

二次方程式での典型例#

x=−b+b2−4ac2a

b>0 で 4ac≪b2 のとき、−b と b2−4ac が近くなり桁落ちする。

対処は式を変形すること。

x=2c−b−b2−4ac

数学的に同じ式でも、数値的には別物。

数値微分での桁落ち#

f′(x)≈f(x+h)−f(x)h

h を小さくすると分子で桁落ちが起きる。 打ち切り誤差と丸め誤差の綱引きの正体がこれ。

対策#

  • 式を変形して引き算を避ける
  • log⁡(1+x) には log1p、ex−1 には expm1 を使う
  • 分散の計算に 𝔼[X2]−μ2 ではなく Welford の逐次法を使う

参考文献#

ノート一覧を閉じる