VBでの数値の扱いと丸め誤差
VB.NETには、数値計算をするための型が、以下のように用意されています。
短整数型 (Short) | 符号あり 2 バイト | −32768 〜 32767 | |
整数型 (Integer) | 符号あり 4 バイト | −231 〜 231−1 | |
長整数型 (Long) | 符号あり 8 バイト | −263 〜 263−1 | |
単精度浮動小数点数型 (Single) | 浮動小数点 IEEE754 準拠 4 バイト | ±1.5−45 〜 ±3.438 | |
倍精度浮動小数点数型 (Double) | 浮動小数点 IEEE754 準拠 8 バイト | ±5.0−324 〜 ±1.7308 | |
10 進型 (Decimal) | 10 進数データ型 | ±1.0−28 〜 ±7.928 |
VB6には、数値計算をするための型が、以下のように用意されています。
整数型 (Integer) | 符号あり 2 バイト | −32768 〜 32767 小数部分は丸められる | |
長整数型 (Long) | 符号あり 4 バイト | -2147483648 〜 2147483647 小数部分は丸められる | |
通貨型 (Currency) | 符号あり 8バイト | -922337203685477.5808 〜 922337203685477.5807 | |
単精度浮動小数点数型(Single) | -3.402823E38 〜 -1.401298E-45 (負の値) | 1.401298E-45 〜 3.402823E38 (正の値) | |
倍精度浮動小数点数型(Double) | -1.79769313486232E308 〜 -4.94065645841247E-324 (負の値) | 4.94065645841247E-324 〜 1.79769313486232E308 (正の値) | |
10 進型 (Decimal) | 小数点以下が 0 桁 (小数部分を持たない数値) の場合 | -79228162514264337593543950335 〜 79,228162514264337593543950335 |
丸め誤差
小数点がある計算を浮動小数点数型で行うと丸め誤差が生じるので、正確さを要求される処理では、通貨型や10進型を使うのが一般的です。
丸め誤差等に関しては以下を参照。
- http://support.microsoft.com/kb/409744/ja
- http://salv.miscnotes.com/1998/03/vb5singledouble.php
- http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200502/05020062.txt
- http://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0
- http://ja.wikipedia.org/wiki/%E8%AA%A4%E5%B7%AE
- http://www.kyoto-su.ac.jp/~yamada/programming/float.html