Excelの計算は信用できない?
世の中には、Excelの計算は信用できないから、電卓で再計算させることがあるとか。
阿保かい。
ところが、実はExcelは結構計算間違いすることがあります。
計算間違いその1:小数の引き算にご注意
Excelクイズです。セルA3に表示される結果は?
当然TRUE?試してみましょう。
なんとFALSEと表示されているじゃないですか。
どういうこと?Excelがこんな簡単な計算をまちがえるの?
なぜ0.1同士で等しくないのか?その理由は「本当の値」にあります。
「小数点以下の桁数を増やす」を15回ほど押してみましょう。
なんと1.2-1.1は0.1ではなく、0.0999999999999999となっています。
なにこれ?バグ?
いいえ、これは仕様です。Excel はIEEE 754という規格に従って小数を扱っています。
IEEE 754は、本来は2進数しか使えないコンピュータで、10進数の数値を扱うための規格です。 ここで問題になるのが、小数の2進数変換です。0.1や0.2などの小数は2進数では、循環小数となってしまいます。 たとえば、0.1を2進数に変換すると0001100110011100110011 (以下繰り返し)となります。
無限に桁を使えるワケはありませんから、途中で切り捨てが発生します。結果として、1.2-1.1=0.0999999999999999という、おかしな結果になるわけです。
疑問1 仕様?明らかに計算間違いなんだから修正されないの?
されないと思います。昔から有名な現象ですが、修正される気配がないです。
疑問2 なんで足し算は大丈夫なの?
よくわかりませんが、Excelがうまいことやってくれてるみたいです。
計算間違いその2:有効桁数にご注意
再びExcelクイズです。セルA1、A2の計算結果は?
どうせ変な結果になってるだろうって? そうだよ。
これも、小数の問題と同じく、IEEE 754に基づく仕様動作です。 IEEE 754の規定では、数値を有効桁数15桁の精度で格納するため、15桁に収めるように切り捨てや切り上げが発生しているのです。 このため、大きな桁と小さな桁の計算ではよく誤差が発生します。
科学的な解析や、金利の会計など、非常に大きな数字と小さな数字を正確にあつかうのは、Excelには難しいです。
結論:やっぱ信用できないじゃん。やっぱ電卓だな。
馬鹿なことやってるんじゃありません。 何処に間違いがあるかわからないから、全部計算しなおすなんて、時間の無駄です。
注意が必要なのは、以下のケースです。
- 小数を含む引き算では誤差が生じることがある。
- 有効桁数は15桁で、それを超える精度の数値を扱うと誤差が生じる。
単なる整数の足し算の集計なら、まず誤差が出るようなことはないです。
小数の引き算を使うときは、整数にしてから計算し、小数に戻す、などで対処できます。
15桁以上の精度で正確に計算する必要のある、科学計算や会計処理は専用のシステムを使いましょう。 それらをExcelでやろうというのがそもそも間違いです。