ロギング

コンピュータが計算を間違えてしまう理由

Pocket

こんにちは、ケースケです。

コンピュータというと”完璧”、”正確”、”計算が得意”などのイメージを持つ人が多いと思います。

一方で、コンピュータ(主にはパソコン)を使って計算をした時に、「計算が違う」または、「謎の数字を返された」という経験をしたことがある人も多いのではないでしょうか。

かく言う私も例に漏れず経験したことがあります。

例えば、0.1×100=10.000002 など

答えは10であるはずなのに、なぜこのような数字をコンピュータは返すのでしょうか。

それを理解するには、コンピュータが扱う2進数を理解すればわかります。

2進数ってなに?と言う方は、「ビットとバイト」で説明していますので、こちらを読んでください。

0.1×100=10.000002になる理由

結論から言うと、10進数の少数点数の中には、2進数に正確に変換できないからです。

2進数は1桁目を2の0乗、2桁目を2の1乗、3桁目を2の4乗…と重み付けをし、その数値を使うか使わないか「0」と「1」を使い表します。

例えば、10進数の3は2進数では11、10は2進数では1010となります。

そして、これは少数点数でも同じです。

つまり、少数点数1桁目は2のマイナス1乗、2桁目は2のマイナス2乗、3桁目は2のマイナス3乗…となります。

ちなみに、2のマイナス1乗は0.5、2のマイナス2乗は0.25、2のマイナス3乗は0.125です。

このように、各桁の数字を使うか使わないかの組み合わせでしか数字を表せないので、正確に表せない数字が出てきてしまうのです。そして、正確に表せない数字については近似値になってしまいます。

これが、0.1×100=10.000002になり、コンピュータがたまにおかしな数字を返してくる理由です。

-ロギング