CO-K48|情報Ⅰ 対策問題
コンピュータの数値計算で「0.1を10回足しても厳密に1にならない」ことがある。この原因として最も適当なものはどれか。
解答・解説を見る
正解: 1
正答
1
この問題のポイント
浮動小数点数の誤差の原因 を問う問題です。「0.1は2進で無限小数になる」という事実が核心です。
解説
10進数の0.1は、2進数に直すと 0.000110011001100… と同じパターンが無限に繰り返される循環小数になります。10進の1/3が0.333…と割り切れないのと同じ現象が、2進では0.1のようなありふれた数でも起こるのです。
コンピュータは小数を有限のビット数の浮動小数点数で表すため、無限に続く2進小数はどこかで打ち切って丸めるしかありません。つまり、コンピュータの中の「0.1」は、本当の0.1にごく近い別の数です。このわずかなずれ(丸め誤差)が10回の足し算で積み重なり、合計が厳密に1にならないことがあります。
原因を整理すると、1. 0.1は2進で無限循環小数になる、2. 有限ビットで打ち切って丸める、3. 誤差が計算のたびに蓄積する、という3段階です。故障でも乱数でもなく、表現方法から来る原理的な性質である点が答えの決め手です。
共通テストでは、この誤差の原因を選ばせる問題のほか、「小数どうしが等しいかの判定には注意が必要」「シミュレーション結果には誤差が含まれ得る」という応用的な理解としても問われます。
選択肢の確認
1.○ 0.1は2進で無限循環小数になり、丸めた近似値を使うから。
2.× 故障ではなく、正常なコンピュータでも起こる原理的な性質。
3.× 0.1という数自体は存在する。2進で有限桁で表せるかどうかの問題。
4.× 足し算に乱数が混入することはない。
ここだけは覚えよう
10進の0.1は2進で無限循環小数 — 有限ビットの丸め誤差が積み重なって0.1を10回足しても1にならないことがある。