こんにちは。ユージーン(@Eugene_no2)です!
わたしは普段から仕事でExcelを多用しているのですが、たまたま奇妙な現象を見つけてしまいました。
「1.2 – 1.1」を計算させても、なんと「0.1」にならないんです!
嘘だと思う方はこの記事を読んで、ぜひやってみてください。
スポンサーリンク
1.2 – 1.1 = 0.1 ではない??
わたしが発見した現象は次の通りです。
まず、A1セルに「1.2」、B1セルに「1.1」と入力します。
次に、C1セルに、「=A1-B1」と入れます。
もちろん、結果は言わずもがな、「0.1」のはずです。
こんなの、小学4年生で習う内容です。
さて、計算結果は、
はい、もちろん、「0.1」になります。
何だよ、合ってるじゃん、と思いますよね??
でも、実は違うんです。
騙されたと思って、「0.1」と表示されているセルの、小数点桁数の表示を増やしていってみてください。
小数点第16位まで伸ばしていくと、なんと!!
0.0999999999999999!!??
この現象を見つけた瞬間は、正直、
これはもしかして、Excelの重大なバグ(不具合)を見つけてしまったんじゃないか?
なんて思いましたが、色々と調べてみた結果、さすがに、そうではありませんでした。
スポンサーリンク
計算結果が0.0999999999999999 になる理由とは?
この結果が生じる理由について、詳しい人に聞いたり、詳しいサイトで調べてみたところ、原因が分かりました。
どうやらExcelにとって、小数点以下の計算を正確に行うのは難しいことらしいのです。
なぜかというと、Excel(コンピューター)の計算は、全て2進数で行われるからだとか。
2進数というのは、学校で習った記憶があると思いますが、「0と1」の世界ですね。
ふだん私たちが使っている10進数では、
1, 2, 3, 4, 5
と数字が進むのに対して、2進数では、
1, 10, 11, 100, 101
と0と1だけで数字が進んでいきます。
更に、Microsoftのサポートページには、次のようにあります。
数値を格納するときには、すべての数や分数が、対応する 2 進数で表現されます。たとえば、1/10 という分数は、10 進法では 0.1 と表現できるのに対し、同じ数を 2 進数で表現すると、次のような循環 2 進数になります。
0001100110011100110011 (以下繰り返し)
この数値は、上記のように無限に繰り返され、有限量の領域では表現できません。したがって、この数値が格納されるときには、約 -2.8E-17 で丸められます。
(引用:Microsoft)
つまり10進法で「0.1」というのは、キリの良い数字に見えますが、コンピューターが認識する「0.1」は、2進数なので、無限に小数点が続く値なんですね。
そのままでは、情報が多すぎて処理できないので、実は、Excelに入力された「0.1」は、自動的にちょこっと丸められた、「0.1」に限りなく近いが、0.1とは異なる数字ということになるようなんです。
そういった小数同士を計算させているので、「1.2 – 1.1」も、限りなく「0.1」に近いが「0.1」ではない結果が得られたということのようです。
ただし、Excelには、誤差を自動で取り除く機能もあるらしく、小数点の計算では必ずこのような現象が起こる、というわけでは無いみたい。
このあたりは、かなり小難しい話だったので、ここでは割愛します。
「Excel 浮動小数点演算 誤差」などと検索すると、詳しいサイトが見つかりますよ!
ちなみに、この「誤差」は、先ほど書いたように、Excel内部の計算が2進数で行われるゆえに起こる現象ですので、整数同士の計算の場合は、一切誤差は生じないようです。
Excelは、色んな計算が出来ますが、まさか小数の計算が苦手だったんですね。
これ結構知らない人、多いんじゃないかなぁ。
明日のツカミにぜひ!
合わせて読みたい![]() |
Excelの便利な活用術・実践的な工夫・小技まとめ![]() 当ブログではたびたび、他のサイトには載っていないような、Excelの便利な活用方法や、実践的な工夫・小技などを紹介しています。 |