計算機算術
多くのプログラミング言語で、倍精度の 0.1 + 0.2 == 0.3 という比較が偽になる理由として正しいものはどれか。
- A足し算の命令が、小数の足し算を正しく行えないことがあるから
- B0.3は浮動小数点数で表せない特別な値で、比較が常に偽になるから
- Cどれも丸めた近い値で表され、誤差で値がわずかに違うから
答えと解説を見る
正解:C. どれも丸めた近い値で表され、誤差で値がわずかに違うから
0.1、0.2、0.3はどれも2進数で正確に表せず、それぞれ最も近い値に丸めて記録されます。0.1と0.2の近似値を足して丸めた結果は 0.30000000000000004 となり、0.3の近似値 0.29999999999999998… とは最後の桁で一致しません。そのため浮動小数点数の比較は、差の絶対値が小さな許容値以下かどうかで判定するのが一般的です。足し算の命令は規格どおり正しく丸めており、0.3も近似値として表せます。
- A. 足し算の命令は規格どおり正しく丸めています。
- B. 0.3も、近い値として表せます。
- C. 正しい。それぞれの丸め誤差のため、結果がわずかに違います。