計算機算術
x が非常に大きいとき、√(x + 1) − √x を浮動小数点で計算すると桁落ちが起こる。結果を精度よく求めるための書き換えとして正しいものはどれか。
- A1 ÷ (√(x + 1) + √x) として計算する
- B√(x + 1 − x) として計算する
- C√(x + 1) と √x をそれぞれ倍精度に変えてから、同じ式で引き算する
答えと解説を見る
正解:A. 1 ÷ (√(x + 1) + √x) として計算する
√(x + 1) と √x はほぼ等しいので、そのまま引くと上位の桁が打ち消し合います。分子と分母に √(x + 1) + √x を掛けると、(x + 1 − x) ÷ (√(x + 1) + √x) = 1 ÷ (√(x + 1) + √x) となり、近い数どうしの引き算がなくなって精度よく計算できます。√(x + 1 − x) は1となり、式として誤りです。倍精度にすると改善はしますが、xがさらに大きくなれば同じ問題が起こるので、根本の対策にはなりません。
- A. 正しい。引き算をなくす変形で、桁落ちを避けられます。
- B. √(x + 1 − x) は1になり、元の式と等しくありません。
- C. 倍精度でも、xがさらに大きいと同じ問題が起こります。