謎11.表計算ソフトなのに計算を誤る?
【現象】 「8.2-7.2」が「0.9999999……」?
⇒【解説】 小数における「演算誤差」は微小値で補正
Excelを使っていて最も不可解なのは、まれに計算を間違うことだ。例えば「8.2-7.2」という引き算。画面上は「1.0」と正しい答えを表示するが、IF関数で「1以上かどうか」を判定すると、そうではないと判定される(図1)。そして答えのセルの表示桁数を増やしていくと、何と「0.9999999……」と間違った結果が表示されてくる(図2)。


実はこれ、Excelに限った問題ではない。「IEEE 754」という数値計算の標準規格に基づく多くのソフトウエアが抱える問題である。「演算誤差」や「丸め誤差」と呼ばれる。
IEEE 754では、通常の10進数を2進数に変換して計算する。その際、整数は問題なく2進数に変換できるが、小数の多くはぴったり2進数に変換できない。例えば10進数の「0.1」は2進数で「0.000110011……」という循環小数になる(図3)。

そこでIEEE 754では、こうした2進数を一定の桁で丸めて処理する。その丸めによって発生するわずかな誤差が、演算誤差を招くわけだ。
演算誤差は、ごくわずかな値なので、通常の計算で支障が出ることはまずない。問題になるのは、図1のように判定をする場合や、切り上げ、切り捨てなどの処理を行う場合だ。
対策としては、誤差が発生しても結果が変わらない程度の“微小値”を足したり引いたりして、値を補正してから処理する方法がある(図4、図5)。微小値の大きさは、判定の基準となる単位(図1の例では0.1)よりも小さく、誤差の範囲よりも大きな値。通常は基準となる単位の10分の1や100分の1と考えればよい。

