5種類の【誤差】について解説
誤差
コンピュータでは8ビットや32ビットといった決められた範囲のビット数で数を表さなければいけません。例えば、1.0000000004という数字を有効数字3桁で表さなければいけなかったら…1.00となるので、誤差が発生してしまいます。
1÷7という計算の結果は、0.142…と、どこかで区切りをつけない限りいつまで経っても計算が終わりません。例えば有効数字5桁と言われると6桁目以降は打ち切るのでここでも誤差が発生します(このように永久に続く数を無限小数といいます)。
ここまで2つの例を挙げましたが、実際にどのような場面で誤差が発生するのか、詳しく解説していきたいと思います。
桁あふれ誤差
桁あふれ誤差とは…演算した結果、コンピュータの扱える最大値・最小値を超えることによって生じる誤差です。
例えば、8ビットで数を表す場合に…(面倒なので符号は無視します)
01001000 + 11000010 という計算を行うとき、答えは100001010という風に9桁になってしまいます。この場合は、8桁で表せる数は00000000~11111111までであり、計算によってこの範囲を超えてしまったということです。桁あふれ誤差とは、このような現象のことを言います。
ちなみに、その桁数で表せられる最大値を超えてしまうことをオーバーフローといい、逆に最小値を超えてしまうことをアンダーフローといいます。今回の例ではオーバーフローが発生したことになります。
情報落ち
情報落ちとは…絶対値の大きな値と絶対値の小さな値の加算・もしくは減算を行ったときに、絶対値の小さな値が計算に反映されないことによって生じる誤差のことをいいます。絶対値の小さな値の情報が落ちているということですね。
例えば、1.00×103と1.0×10-3という2つの数の加算を行うとしましょう。
すごく計算しづらいので、指数をそろえます。
1.00×103 + 0.000001×103 = 1.000001×103
では、最初のように有効数字3桁で表現すると…1.00×103となります。足し算をしたはずなのに、ぱっと見た限りでは反映していない(=情報が落ちている)状態になるわけですね。このような現象が情報落ちです。
打切り誤差
打切り誤差とは、名前の通り、計算結果を途中で打ち切ることによって生じる誤差のことを言います。
冒頭の話にも出て来た1÷7という計算をするときには、割り切れず計算が永久に続きます。このようなときは、〇〇桁まで!というルールを決めて途中で計算を打ち切ります。ここで打ち切ったときに生じる誤差のことを打切り誤差といいます。
桁落ち
桁落ちとは、有効な桁数が大きく減ってしまうことによって生じる誤差です。
例として、0.117×103から0.113×103を引くことを考えます。どちらも有効桁数は3桁です。
ところが、引き算をすると…0.004×103となります。有効桁数が1桁になってしまいました。
この場合、有効数字3桁で表現すると0.00400×103になります。赤字の0の部分は有効桁数3桁にするために付加した0です。しかし、補った桁がもともと0だったという保証はないんです。0.0041×103という数値も有効数字3桁で表現すると0.004×103になってしまうわけですから、信用できない桁が生じるんですね。
このように、絶対値がほぼ等しい数同士の減算によって有効桁数が減ってしまうことによって生じる誤差を桁落ちといいます。桁落ちについて理解するのは難しいと思います(私もこの説明でいいのかどうか少し不安でもあります…笑)。でも試験で聞かれるレベルだと、絶対値がほぼ等しい数同士の減算…というフレーズで桁落ちだと判断できれば大丈夫だと思います。
丸め誤差
丸め誤差とは、表現できる桁数を超えてしまったときに最小桁より小さい部分を切り上げ・切り捨てなどしたときに生じる誤差のことです。
1.0000233743という数字を有効数字8桁で表現する場合、1.0000234となります。四捨五入を行った結果誤差が生じます。この誤差を丸め誤差といいます。
以上、5種類説明しましたが、すべて理解できました??笑
正直よく分からんって方もいらっしゃると思います。
そのような方のために、5つの誤差の要点だけまとめましたので、ぜひ参考にしてみてください!
- あるビット数で表現できる範囲を超えてしまう → 桁あふれ誤差
- 絶対値の小さな値が計算に反映されていない(情報が落ちている) → 情報落ち
- 無限に続く計算を途中で打ち切る → 打切り誤差
- 有効桁数減少 → 桁落ち
- 四捨五入・切り上げ・切り捨て → 丸め誤差
例題
実際の試験では、このような問題が出題されます。
桁落ちの説明として適切なものはどれか。
ア.値がほぼ等しい浮動小数点数同士の減算において、有効桁数が大幅に減ってしまうこと。
イ.演算結果が、扱える数値の最大値を超えることによって生じるエラーのこと。
ウ.浮動小数点数の演算結果について、最小の桁よりも小さい部分の四捨五入、切り上げ・切り捨てを行うことによって生じる誤差のこと。
エ.浮動小数点数の加算において、一方の数値の下位の桁が結果に反映されないこと。
正解は分かりましたか?
ア.桁落ち
イ.桁あふれ(オーバーフロー)
ウ.丸め誤差
エ.情報落ち
したがって、正解はアです。
まとめ
今回は、誤差について解説しました。
その桁数で扱える範囲を超えてしまう桁あふれ誤差、絶対値が大きい数と絶対値が小さい数の加算等を行ったときに絶対値が小さい数が結果に反映されずに生じる情報落ち、無限に続く計算を途中で打ち切ったことで生じる打切り誤差、絶対値がほぼ等しい数同士の減算によって生じる桁落ち、四捨五入・切り上げ・切り捨てによって生じる丸め誤差の5種類の誤差があります。
今回紹介した例題以外にも、過去にはもっと多くの形で出ていたりします。もっといろんな問題を解くことで自然に覚えていくと思います。
というわけで、今回はここで終わりです。何か参考になる情報があれば嬉しいです。
最後までお読みいただき、ありがとうございました。