IT技術者にとっての「誤差」について

誤差とは

誤差ってそもそも、何だろうか?という所から考える。

ごさ
【誤差】
測定や理論的推定などで得られた近似値(測定値)と真の値(と考えられるもの)との差。

という事である。

「丸め誤差、打ち切り誤差、情報落ち、けた落ち」などの様々な誤差があるが、これは「原因」である。

丸め誤差は丸めた事によって誤差が生じたのであり、打ち切り誤差は打ち切った事によって誤差が生じたのである。

丸め誤差

四捨五入、切り捨て、切り上げを行った事が原因で生じた誤差の事。

打ち切り誤差

いつまで経っても終わらない計算処理を行なう時に、「ある程度の結果が得られればそれで良い」とするケースについては、その時点で処理を終了する。

完全に計算が終わる前に処理を終了している事が原因で発生する誤差が「打ち切り誤差」である。

例えば小数点の「0.333333333」がずっと続くような処理は打ち切る訳である。

情報落ち

絶対値が大きい値に対して、絶対値の小さい値が加減算された時に生じる誤差。

なんて言われてもわからん。全然わからん。

これには「有効桁数」という要素を入れないとわからんだろう。普通に。

要は「8桁しか保持しない箱」があるとする。今その箱の中には「12345678」という数が入っている。これに対して「0.1」という数をプラスするとしよう。

この場合、桁数を考慮しないのならば、結果は「12345678.1」である。しかしこの箱には8桁しか入らない。よって先頭桁から順に詰めていくと結果は「12345678」になる。せっかく「0.1」をプラスしたのに全然変わってないじゃん!情報落ちてんじゃん!というのが、情報落ちである。

もうちょっと命名なんとかなんなかったのかなぁ?「小さい数は有効桁数に入り切らないないから、消えちゃうよ誤差」じゃん。なんだよ情報落ちって。初見でまるでピンと来ない。カッコつけるよりも、わかりやすさを重視する方が大切だと思う。

けた落ち

厳密には「自動的に0埋めされる時に生じる誤差」である。

そして、どんな時に自動的に0埋めされるかと言うと、けた落ちが発生した時である。これを「けた落ち誤差」と命名するのは如何なものだろうか。

けた落ちは、浮動小数点数の計算においてのみ発生する。

詳しい事は私も知らないが、コンピュータが演算処理を行なう時には「有効桁数」というものがあるらしい。一度に計算する桁数のことのようである。

例えば、30桁の数値があったとしても、一気にそんなには計算できないから10桁単位で計算しましょう、みたいな話だ。

それを踏まえて、けた落ちの説明をすると、「0.111111112」マイナス「0.111111111」という計算をしたとする。すると結果は「0.000000001」になる。

この時、浮動小数点数のルールとして桁を寄せなければいけないそうだ。先の例からすると「0.000000001」を「0.1のマイナス何乗」みたいな感じにすると。

でも先程出てきた「有効桁数」というものがある。これが厄介である。「0.1のマイナス何乗」という結果にはなったものの「有効桁数の10桁に揃えなくてはいけない」のである。

で、揃えるためにどうするか?どうにもコンピュータは「0を自動的に埋めちゃってくれる」のである。お節介である。

それにより「0.100000000」みたいな感じになる。有効桁数を守るためにだ。

しかしながら、この数値が本来持っているのは30桁である。ならば、後ろの桁から値を持ってこなければいけないのだが、0で埋めてしまう。それによって誤差が生じる。それがけた落ちによる誤差だと思う。