演算誤差

 コンピュータ内部で数値を取り扱う際、その保存領域は有限です。簡単に言えば、取り扱える最大の桁数には限りがあります。その制約によって、数値演算を行なう際に「誤差」が生じる場合があります。ここでは、その誤差の原理について簡単にみていきます。

丸め誤差

(話を簡単にするために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 となります。このような誤差は、「桁あふれ誤差」(この例の場合はオーバーフロー)と呼びます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

前の記事

データベース新着!!