【高校情報】演算誤差とは?2進数小数のしくみをわかりやすく解説
コンピュータの演算誤差(えんざんごさ)とは??
コンピュータで計算をすると、正しいはずの計算なのに誤差が出ることがあるの。
例えばこんな現象を見たことはないかしら?
0.1 + 0.2 = 0.30000000000000004
えっ?
0.3じゃないの?
と思うわよね。

実はこれ、コンピュータのバグではないの。
コンピュータが数を2進数で扱っていることが原因なのよ。
このように本来の値とズレが生じることを、
演算誤差(えんざんごさ)
というわ。
今回は
- なぜ演算誤差が起こるのか
- 2進数の小数表現
- 0.3が正確に表せない理由
をわかりやすく説明するわね。
コンピュータは2進数で数を扱う
私たちが普段使っている数は10進数よね。
例えば
0.875
これは
$$0.875 = 0.5 + 0.25 + 0.125$$
つまり
$$0.875 = \frac{1}{2} + \frac{1}{4} + \frac{1}{8}$$
これを2の累乗で書くと
$$0.875 = 2^{-1} + 2^{-2} + 2^{-3}$$
だから
$$0.875 = 0.111_{(2)}$$
つまり2進数で正確に表せる数ね。
小数は2進数で表せないことがある
ところが、すべての小数が2進数で表せるわけではないの。
例えば
0.3
これを2進数にすると
$$0.3_{(10)} = 0.0100110011…$$
のように永遠に続く小数になってしまうわ。
これは10進数でいう
1 ÷ 3 = 0.333333...
と同じ現象よ。
つまり2進数では割り切れない数なの。
コンピュータは桁数が有限
でもコンピュータの中では桁数は無限にはできない。
だからある桁で打ち切る必要があるのよ。
例えば小数点以下8桁までとすると
$$0.01001100_{(2)}$$
のようにするの。
これを
丸め処理
というわ。
2進数を10進数に戻してみる
この値を10進数に戻すと
$$0.01001100_{(2)}$$
$$= 0\times2^{-1} + 1\times2^{-2} + 0\times2^{-3} + 0\times2^{-4}$$
$$+1\times2^{-5} + 1\times2^{-6} + 0\times2^{-7} + 0\times2^{-8}$$
計算すると
$$0.296875$$
になる。
元の値との誤差
元の値は
0.3
だったわよね。
でもコンピュータの中では
0.296875
として扱われているの。
つまり誤差が生まれているということね。
演算を重ねると誤差は広がる
さらに問題なのは、計算を繰り返すと誤差が少しずつ広がることなの。
これを誤差の伝播というわ。
だからコンピュータの計算では
- 丸め誤差
- 演算誤差
- 誤差の蓄積
といった問題が起こるのよ。
まとめ
- コンピュータは数値を2進数で扱う
- 10進数の小数は2進数で正確に表せないことがある
- コンピュータは桁数が有限なので丸め処理が起こる
- その結果、演算誤差が生まれる
- 計算を繰り返すと誤差が伝播する
でもこの仕組みを知っておくと、
- プログラム
- AI
- シミュレーション
などの理解がぐっと深まるの。ぜひ覚えておいてね。
それじゃあ!