タイトル : Re: 数字の比較について 投稿日 : 2017/01/19(Thu) 10:40 投稿者 : Hongliang
// VB6の事情は知りませんが。以下はVB.NETについての記述です。 まず、2.3は、SingleやDoubleで使用される2進浮動小数点数としては無限小数としてしか表現できないので、性格に2.3を表現することは不可能です。 また、ただの小数点を含むリテラル数値は、Doubleであるとみなされます。 2.3をSingle型変数に代入した場合、無限小数の下の方の桁が丸められて格納されることになりますので、それを丸める前のDoubleと比較した場合、厳密には同じ値ではなくなります。 Double型と、Single型(をDouble型に変換した値)のビット表現を、以下のコードで確認してみてください。 Dim d As Double = 2.3 Dim s As Single = 2.3 Debug.Print("{0}", Convert.ToString(BitConverter.DoubleToInt64Bits(d), 2)) Debug.Print("{0}", Convert.ToString(BitConverter.DoubleToInt64Bits(s), 2)) 浮動小数点数型は諸々誤差の出やすい型ですので、単純に = で比較すると問題が出やすいです。 |