Double型のバグ?

解決


まつい  2004-08-13 12:38:38  No: 85116

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim a As Double = 0.234
        Dim b As Double = (0.236 - 0.002)

Debug.WriteLine(a = b)
End Sub

答えがFalseになってしまいます!


JAN  2004-08-13 14:57:58  No: 85117

バグというより計算機の宿命ですね

0.234と0.002では指数部の値が異なっており、またそれぞれの数値が2進数で
は割り切れない数字なので、2つの数字を演算する時の指数部の変換の際に
どうしても誤差が出てしまいます。

ためしに下記計算ではTrueになると思いますよ
a=0.234
b=0.334 - 0.1
とか
a = 0.625
b = 0.5625 + 0.0625

という性質があるので小数の比較で=演算子を使用するのはプログラム上
避けたほうがいいでしょう。


JAN  2004-08-13 15:04:20  No: 85118

>0.234と0.002では
訂正)0.236と0.002では


まつい  2004-08-13 22:46:34  No: 85119

なんと。計算機の宿命でしたか。勉強になりました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加