コンピュータで扱う数値の誤差について| 基本情報技術者試験のポイント解説

数字

コンピュータ上で10÷3の計算をしたらどのような結果になるでしょうか。紙と鉛筆で計算をしたら、3.33333・・・のように3が無限に続くように計算されるでしょう。

しかし、コンピュータの能力は無限ではないので、無限に続く3を表すことはできません。コンピュータで扱う数値は必ず近似値として扱うことになります。この時に、実数と近似値で誤差が発生することになります。

この記事では、コンピュータで数値情報を扱う際に必ず発生する誤差について、その種類と概要の解説を行います。

目次

コンピュータにおける誤差とは

コンピュータ上では、数値を一定の大きさの箱(変数)として扱います。例えば、4バイトの大きさで数値を扱う場合、整数値であれば「-2,147,483,647から2,147,483,647」の範囲を取り扱えることになります。

このように、コンピュータ上で扱える数値の範囲は決まっていますので、上述のように割り算などによって無限に小数点が続く場合、コンピュータ上では必ずどこかで近似値として扱う必要があります。

それ以外にも、膨大で扱いきれない大きさの数を扱う場合や、反対に小さすぎて扱えないような数値も存在します。例えば4バイトの範囲であれば、2,147,483,647より大きい数字を取り扱うことはできません。

これらの例のように、コンピュータ内部ではあらかじめ定められた桁数内でのみ数値を扱うことができるため、実際の数値を正確に表すことができない場合があります。ここで数値の誤差が発生します。

誤差の種類

コンピュータ上で発生する誤差は、いくつかのパターンに分かれます。以下では、それぞれの誤差の発生原因とその概要について解説します。

丸め誤差

丸め誤差とは、限られた桁数内で数値を表すために四捨五入や切り捨て、切り上げなどにより数値を修正することにより発生する誤差のことです。

上述した例のように、無限に小数点が続く場合には、どこかで四捨五入をしたり、切り捨て・切り上げなどをしたりすることで、範囲内の情報に収める必要があります。この際に、実際の値とズレが生じるのが丸め誤差です。

打切り誤差

打切り誤差とは、主に除算などにより無限に桁が続く場合などに起こる誤差のことで、あらかじめ決めておいた桁数までで計算を終了することにより発生します。

打切り誤差の例としては、円周率を用いた計算が挙げられます。円周率は無理数であり、無限に小数点以下の数字が続きますが、コンピュータ上では必ず限られた範囲で数値を扱う必要がありますので、例えば3.14までなど桁数を限定して計算を行うルールとしておきます。実際の円周率とは違う値を計算に利用していることになりますので、実際の計算結果とは誤差が生じることになります。これが打切り誤差です。

情報落ち

情報落ちは、絶対値の大きな数値と小さな数値同士で加算や減算を行った場合に、小さな数字の桁情報が無視されてしまい計算結果に反映されない誤差のことです。

例えば、4バイトで小数の数値を扱う場合に、3×10の8乗のような大きい数値に対して、0.0003のような小さい数値を足すと、後者の数値が小さすぎて計算結果に反映されません。これは、3×10の8乗の値が大きすぎて、取り扱うためには小数点以下の領域を確保できず、0.0003の情報を保持する場所がないためです。

このように、大きな数値と小さな数値を足す場合には情報が落ちてしまうケースがあることに注意が必要です。

桁落ち

桁落ちとは、絶対値のほぼ等しい二つの数値で減算を行ったときに、有効桁数が減少することにより発生する誤差のことです。

例えば、0.1234 – 0.1233のような計算を行うとします。この結果は、0.0001となりますが、この計算の前までは有効桁数が4桁あったのにも関わらず、計算結果は有効桁数が1桁となっています。

この計算自体で誤差が発生しているわけではありませんが、この有効桁数が下がった数値を使って後続の計算を行う際に、計算の精度が落ちることで誤差の原因となります。これが、桁落ちが発生することの問題です。

桁落ちはコンピュータに限って発生する誤差ではありませんが、手計算などと同様にコンピュータで計算を行う際にも注意する必要があります。

オーバーフロー

オーバーフローとは、計算結果の桁数があらかじめ定めておいたものを超えることで発生する誤差のことです。

例えば、4バイトの整数で扱える範囲は「-2,147,483,647から2,147,483,647」と説明しましたが、ここで3,000,000,000を扱おうとすると、数値の範囲が足りずエラーとなってしまいます。

アンダーフロー

一方でアンダーフローとは、計算結果の小数部分の絶対値が0に近づきすぎて細かい値を表現できなくなることです。

例えば、4バイトの小数で扱える範囲は、「3.4×10の38乗~3.4×10の-38乗」までの数値ですが、ここで1.0×10の-40乗のような小さい数値を扱おうとすると、数値の範囲が足りずエラーとなってしまいます。

まとめ

この記事では、基本情報技術者試験を受けようとされている方に向けて、コンピュータ上での誤差に関する内容の解説を行いました。ポイントは、コンピュータ上で取り扱える数値の範囲は有限であり、その範囲内で数値を扱うために必ず誤差が発生するということです。

誤差の種類と概要については、基本情報技術者試験でも良く問われる内容ですので、これを機会に押さえておくとよいでしょう。