質問: 2.11 msgbox a + b 表示される答え:-7.00000000000003e-02 期待する答え:-0.07 原因がわからず困っています。
回答: 計算機は2進数で計算していることはご存知ですね? 小数点以下も同じく、2進数で計算します。 本当は、小数点以下は、ieee形式と呼ばれるもので表現しているので、かなりちがうのですが、簡単のために一般的な2進数表記で少数以下をあらわしてみましょう。 10進数の0.1は10の-1乗ですね。 当然ですが、2進数でも同じ考え方をします。 2進数の0.1は2の-1乗です。 2の-1乗はいくらでしょう?0.5ですね。 同じく、2進数の0.01は2の-2乗なので0.25です。以下0.125, 0.0625,0.03125,....となります。 ここで、10進数の0.1は2進数ではいくらか考えてみましょう。 0.1=0.0625+0.03125+....となって、循環小数になってしまいます。 あなたのご質問に戻ると、このように、2進数の少数形式でいったん内部で保持されてから、計算するので、10進では起こらなかった誤差というものが生じてしまうのです。 10進でぴったりあらわされるからといって、計算機の中でちゃんとぴったりとあらわされているとは限らないということです。