資料室 > よくあるトラブル > 小数計算で結果が期待したものにならない > 小数計算の誤差

小数計算の誤差

【例】
次の例を確認してほしい。
A1 =8.4-8.2
A2 =10-9.8
A3 =A1-A2

このとき、A1、A2にはともに「0.2」が表示され、A3には「1.77636E-15」と表示される
「1.77636E-15」は「1.77636×10のマイナス15乗」を意味する。
つまり、A1とA2の数式の答えにはそれだけの誤差がある。
セルA3の小数点以下の表示桁数を30くらいにしてみると「0.000000000000001776356839400250」と表示される。
常識的に考えると、A1とA2の値はどちらも「0.2」であるから、A3は「0」にならねばおかしいが、結果は上記のとおりである。全ての小数計算でこのようなことが起こるわけではないが、稀に起こるからこそ困る場合があるので、小数計算には注意しておく必要がある。

【解決策1】

A1 =ROUND(8.4-8.2,5)
A2 =ROUND(10-9.8,5)
A3 =ROUND(A1-A2,5)

ROUND関数の桁数の引数は「5」に限る必要はないが、有効な桁数を見極めておく必要はある。

【考察】

これはEXCELの問題ではなくて、コンピューターの計算する仕組みそのものの問題であり、10進数(表示)と2進数(内部形式)をやり取りする際に生じる誤差が原因である。
小数同士の計算を繰り返す場合はよく問題になる。決定的な解決方法はない。
「表示に問題のない程度のごく小さな小数(1×10のマイナス15乗くらいの)をあらかじめ足しておく」と言う方法を紹介する人もいるが、

この2点の理由から、容易に賛同できない。
上記のように有効な桁数を見極め、あらかじめ数値を丸めて計算することをお勧めする。
A3の数式だけでもとりあえずは計算結果を得ることが出来るが、A1、A2に誤差を含んだ数値が常に残る。
元から正したほうが無難。

【解決策2】

[ツール(T)]>[オプション(O)]>[計算方法]タブで
[表示桁数で計算する(P)]のオプションをオンにする。

【考察】

この設定にしておくと、セルの値がどんな誤差を含んでいようとも、それを計算に利用する場合には表示されている桁数の数値が優先される。表示桁数の設定だけで数値の四捨五入を行うので、ROUND関数も必要なく、一見便利なようだが、下記の点に注意。


前(計算したセルをSUM関数で集計すると誤差) 目次 次(一部罫線が印刷されない/余分に印刷される)


SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送