第3章:計算に関する限界と誤差

こんにちは!このチャプターでは、コンピュータが計算する際につきまとう「限界」「誤差」について学びます。「コンピュータは計算が完璧にできる」と思っていませんか?実は、コンピュータの仕組み上、どうしても避けられない間違いがあるんです。共通テストでは、こうした誤差の種類や原因がよく問われます。最初は少し難しく感じるかもしれませんが、具体例を使えば必ず理解できますよ。一緒に頑張りましょう!

(※このチャプターは「コンピュータと情報の内部表現」というセクションの一部です。2進法などの基礎は「2進法・16進法と数値の表現」の回も参考にしてくださいね。)

1. なぜコンピュータは「間違い」を犯すのか?

コンピュータが計算を間違える最大の理由は、「扱える桁数に限りがあるから」です。数学の世界では無限に続く数字も扱えますが、コンピュータのメモリ(記憶場所)は有限です。そのため、どこかで数字を切り捨てたり、近似値を使ったりしなければなりません。これが「誤差」の正体です。

ポイント:コンピュータは「有限桁(ゆうげんけた)」の世界で生きている!
数学では \( \frac{1}{3} = 0.3333... \) と無限に書けますが、コンピュータは途中で「ここまで!」と打ち切るしかないのです。

2. いろいろな誤差の種類

共通テストで特に出やすい5つの誤差・現象を整理しましょう。

① 丸め誤差(まるめごさ)

数値をある桁で四捨五入したり、切り捨てたり、切り上げたりすることによって生じる誤差です。一番イメージしやすい誤差ですね。
例: \( \frac{1}{3} \) を \( 0.333 \) として計算すると、\( 0.000333... \) 分の誤差が出ます。

② 打ち切り誤差(うちきりごさ)

無限に続く計算を、途中のステップで止めてしまうことで生じる誤差です。
例: 円周率 \( \pi \) の計算を、ある程度の桁数でストップして計算を終了させる場合などがこれにあたります。

③ 桁落ち(けたおち)

「値が非常に近い2つの数」の引き算をしたときに、有効な数字の桁数がガクンと減ってしまう現象です。これは非常に間違いやすいポイントです!
例:
\( 1.234567 \) (有効数字7桁)
\( - 1.234566 \) (有効数字7桁)
\( = 0.000001 \) (有効数字が1桁になってしまった!)

④ 情報落ち(じょうほうおち)

「非常に大きい数」「非常に小さい数」を足したり引いたりしたときに、小さい方の数字が計算結果に反映されず、無視されてしまう現象です。
例: 1兆円持っている大富豪の貯金残高に、道端で拾った 1円を足しても、コンピュータの精度によっては「1兆円」のままで変わらない、というイメージです。

⑤ オーバーフロー と アンダーフロー

コンピュータが扱える数値の範囲を超えてしまう現象です。
オーバーフロー(桁あふれ): 計算結果が、扱える最大値よりも大きくなってしまうこと。
アンダーフロー: 計算結果の絶対値が、扱える最小値(0に近い値)よりも小さくなり、0として扱われてしまうこと。

よくある間違い: 「桁落ち」と「情報落ち」を混同しないようにしましょう!
桁落ち近い数どうしの引き算でスカスカになる
情報落ち大きさが全然違う数足し算で小さい方が消える
と覚えましょう。

3. 2進法特有の落とし穴

ここが共通テストで最も狙われるポイントです。私たちは普段「10進法」を使っていますが、コンピュータは「2進法」を使っています。10進法ではキリがいい数字でも、2進法に直すと無限小数(終わりがない数字)になってしまうことがあるのです。

例:10進法の \( 0.1 \) は、2進法ではどうなる?
実際に計算してみると...
\( 0.1 \times 2 = 0.2 \) (0)
\( 0.2 \times 2 = 0.4 \) (0)
\( 0.4 \times 2 = 0.8 \) (0)
\( 0.8 \times 2 = 1.6 \) (1)
\( 0.6 \times 2 = 1.2 \) (1)
\( 0.2 \times 2 = 0.4 \) (0) ← ここから繰り返し!
つまり、\( 0.1_{10} = 0.00011001100..._{2} \) となり、永遠に終わりません。コンピュータはこの途中で数字を切り捨てるため、「0.1 を 10回足しても 1.0 にならない」といった誤差が生まれるのです。

ポイント: 2進法で小数が「有限(キリがよく)」終わるためには、分母が \( 2^n \)(2, 4, 8, 16...)の形である必要があります。たとえば \( 0.5 = \frac{1}{2} \) や \( 0.25 = \frac{1}{4} \) は2進法でもピタッと止まりますが、\( 0.1 = \frac{1}{10} \) は止まりません。

4. まとめとアドバイス

豆知識: 過去には、この「0.1秒」のカウントのわずかな誤差が積み重なり、ミサイル防衛システムの計算が狂ってしまったという有名な事故もありました。コンピュータの誤差は、私たちの生活に大きな影響を与えることもある大切な問題なのです。

今回の重要語句まとめ:
丸め誤差:四捨五入などで出る誤差。
桁落ち:近い数の引き算で有効桁数が減ること。
情報落ち:大きな数に小さな数を足しても無視されること。
2進法の誤差:\( 0.1 \) など、2進法で表すと無限小数になる場合に発生する。

最初は「なぜ引き算で桁が落ちるの?」と不思議に思うかもしれませんが、具体的な数字で計算してみると「なるほど!」と納得できるはずです。計算問題が出たときは、落ち着いて「今どの誤差の話をしているのかな?」と考えてみてくださいね。お疲れ様でした!