###質問事項
VBA の丸め誤差(?)についての質問です。
以下のコードの実行結果の理由が分からず困っています。
vb
1Debug.Print Int(0.95 + 0.05) ' 0 となる 2Debug.Print Int((95# / 100#) + 0.05) ' 1 となる
0.95
と 0.05
はそれぞれ循環小数のため Int(0.95 + 0.05)
の実行結果が 0
となることは理解していますが、Int((95#/100#) + 0.05)
の実行結果が 1
となるのが理解できません。
0.95
と (95#/100#)
は等価のように思えるのですが異なるのでしょうか?
型が何か関係しているのかと思い、試しに以下のようにして型の確認を行いました。
vb
1Debug.Print TypeName(0.95) ' Double となる 2Debug.Print TypeName(95#/100#) ' Double となる
どちらも Double
となり型の違いによる計算結果の違いではなさそうだと考えています。
計算処理内部の動作がどうなっているか確認する方法が思いつかなかったためディスアセンブルして確認を試みているのですが、なかなか大変なので質問させていただきました。
補足
浮動小数点数によって誤差が出る問題に対しては通貨型や十進数型を使えば良いことは理解しています。
上記のコードの実行結果の理由についてご教授くださいませ。
###補足情報(言語/FW/ツール等のバージョンなど)
- Windows10 Pro(32bit)
- Microsoft Office Professional Plus 2010 14.0.4734.1000 (32ビット)
- Microsoft Visual Basic for Applications 7.0 (Version:1589)
- Intel Pentium P6100 @ 2.00Gz
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/31 00:55 編集