演算誤差
コンピュータ内部で数値を取り扱う際、その保存領域は有限です。簡単に言えば、取り扱える最大の桁数には限りがあります。その制約によって、数値演算を行なう際に「誤差」が生じる場合があります。ここでは、その誤差の原理について簡単にみていきます。
丸め誤差
(話を簡単にするために10進数で考えます)
例えば、「循環小数」について考えてみます。
1/3 = 0.3333333333… ですね。
これについて、極端に、コンピュータ内部で小数点以下 5桁だけ保存できるとします。
すると、コンピュータ内部では 1/3 = 0.33333 となります。
同じ様に 2/3 についても 2/3 = 0.66666666… が、
2/3 = 0.66666 となります。
よって、a = 1/3, b = 2/3 とそれぞれ演算した値と保持した上で、
a + b を計算させると、
a + b = 0.33333 + 0.66666 = 0.99999 となります。
決して1にはなりません。これが「丸め誤差」の原理です。
情報落ち
この「情報落ち」という誤差は、極端に差のある数値の加減算により生じます。
上と同じく、話を簡単にするために10進数で考えます。
コンピュータ内部で、8桁が取り扱えるとして、99999999 という値が保存されているとします。
これに、0.0000001 を加算する演算を行います。
すると、99999999 + 0.0000001 = 99999999.0000001 ですね。
しかし、取り扱えるのは8桁までという制約があり、それを適用すると、
99999999 となります。
結果何も足されていないことになりますね。これが「情報落ち」の原理です。
ちなみに、
99999999 + 1 を計算すると、100000000 となりますね。この場合、8桁に収めると 00000000 となります。このような誤差は、「桁あふれ誤差」(この例の場合はオーバーフロー)と呼びます。