はじめに
今回は、打切り誤差、けた落ち、丸め誤差、情報落ち、桁あふれの「誤差」の
違いについて説明していきます。
この記事はこんな方にオススメ!
- IT系の分野で活躍したいので、IT用語・知識を習得したい
- 基本情報技術者、応用情報技術者などIT系の資格を取りたい
- システムエンジニアとして復習がしたい
誤差って何?
「誤差」とは実際の数字とシステム内部で処理された数字の間に
できたズレのことを指します。
「誤差」には種類がある
システム内部で発生する誤差については、以下の5種類があります。
- 打切り誤差
- 桁落ち
- 丸め誤差
- 情報落ち
- 桁あふれ
誤差に種類があることがわかった上で、それぞれの誤差について説明します。
打切り誤差
システムでの計算処理の結果、最後まで計算せずに途中で打ち切りした時に
発生する誤差です。
例えば、1÷3=0.3333333333・・・・・のような無限小数だったり、
円周率3.1415926535・・・・・などの無理数をシステム処理にて計算する時に
システム仕様により、打ち切られた部分が誤差となります。
丸め誤差
システム処理にて表現できる桁数を超えた数字を扱うときに
最小桁を四捨五入、切り捨て、切り上げなどを行うことによって
生じる誤差です。
桁落ち
桁落ちとは数値がほぼ等しく丸め誤差を含む小数点同士の差を求めたときに
有効な桁数が大きく減ることによって生じる誤差です。
例えば、有効数字7桁で四捨五入、切り捨て、切り上げ、いずれかの方法で丸められた
0.3333334×108 と0.3333333×108 という2つの数字があったとします。
この2つの数字の差をとった時、0.0000001×108 という答えが出ますが、
有効数字7桁という制約がある以上、システム処理では0.1000000×102と
表現される訳です。0.1000000×102の赤マーカー部分は本当に0であったかの
保障がありません。
システム処理にて表現された0.1000000×102は誤差がある可能性があり、
次の計算にて使った場合に、どんどん誤差が生じてくるのです。
情報落ち
大きな数字と小さな数字の足し算、引き算を行ったときに
小さな数字が計算結果に表現されないことによって生じる誤差です。
例えば、有効数字が4桁だとして、
0.9999×103と0.9999×10-3という2つの数字の足し算をしたとき、
システム処理にて計算する際は、指数部を合わせなければいけないので、
0.9999×103+0.0000009999×103をすることとなります。
結果は0.9999009999×103となりますが、
有効数字が4桁であるため、システムで表現すると
0.9999×103となります。
桁あふれ
システム処理した結果、システムが許容できる最大値や最小値を超える際に
生じる誤差です。最大値を超えることを「オーバーフロー」、最小値を
下回ることを「アンダーフロー」と呼びます。
代表的な例としては、UNIX時間における「2038年問題」。
UNIXの時刻は符号付き32ビットで表現されており、表現できる数字は
2,147,483,647秒(=231-1)である。符号付き32ビットであるため、
なんと2,147,483,647秒を超えると-2,147,483,647秒となってしまうのです。
UNIX時間は協定世界時間における1970年1月1日0時0分0秒から
時刻のカウントがスタートし、2,147,483,647秒経過した
2038年1月19日3時14分7秒を超えると、オバーフローを起こし、
1901年12月13日20時45分52秒となってしまう可能性があるのです。
これは我々が一般的に使っている「誤差」レベルではないですね・・・
おわりに
今回は、打切り誤差、けた落ち、丸め誤差、情報落ち、桁あふれの「誤差」の
違いについて説明しました。他の記事で様々なIT用語を説明しているので、
他の記事もチェックしてください!