コンピュータの計算精度

コンピュータと数値

そもそも、コンピュータは計算をするために作られた機械です。
コンピュータでは 0 と 1 という 2 進数を使ってあらゆる処理をおこないます。
なぜ、0 と 1 なのでしょうか。
たとえば、 123 + 345 という計算をおこなう場合には、 コンピュータの内部では 1111011 + 101011001 という 2 進数に変換されて計算がおこなわれます。
複雑なパターンを見分けるのが得意な人間にとっては、 123 や 345 という 10 進法の数値のほうが計算しやすいですが、 単純な計算を高速におこなうのが得意なコンピュータにとっては 0 と 1 しかあつかわない 2 進数のほうが計算しやすいのです。

コンピュータの実数

コンピュータで扱える数値には整数と実数の 2 種類があります。
コンピュータでは前述のように、 2 進数が計算の基本ですが、 0.5 や -1.23 のような実数の計算には CPU の中の別の回路(FPU)が使われます。
つまり、 1 + 2 と 1.0 + 2.0 では違う方法で計算されています。
CG 制作やプログラミングを行う時に覚えておくべきことは、 整数(int)と実数(float, double)では同じ計算でも計算結果が違ってくることがあるということです。

コンピュータはいいかげんである

コンピュータは計算を速く正確に行う機械だというイメージがありますが、 実は不正確な計算しかできません。 特に大きな数値や小さな数値の計算には注意が必要です。

計算例

以下の例では C 言語で作成したプログラムによって 計算結果を小数点以下 10 桁まで表示しています。

0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 = 1.0000001192
0.1 を 10 回加算した結果
0.01 + 0.01 + ... = 0.9999993443
0.01 を 100 回加算した結果
0.001 + 0.001 + ... = 0.9999907017
0.001 を 1000 回加算した結果
0.0001 + 0.0001 + ... = 1.0000535250
0.0001 を 10000 回加算した結果
0.00001 + 0.00001 + ... = 1.0009901524
0.00001 を 100000 回加算した結果
1.0 / 3.0 = 0.3333333433
1.0 を 3.0 で割り算した結果

コンピュータが扱える数の範囲は決まっています。 その範囲を超える計算をしようとすると結果がおかしくなります。 現在、よく使われているパソコンで使用できる整数の範囲は -2147483648 から 2147483647 までなので、以下のような計算結果が出てしまいます。

2147483647 + 1 = -2147483648
計算結果がいきなりマイナスになります。
-2147483648 - 1 = 2147483647
逆に計算結果がプラスになってしまいます。

参考


Prev
Home | Contents
Mail