2015-03-31 124 views
1

雙比較給我意想不到的結果。當我增加Epsilon的0.0時,我得到一個增加的值,當我增加Epsilon的25.0時,我得到了25.0,而不是更多。我如何增加最小雙倍數的25.0來觸發比較?爲什麼使用0.0而不是25.0?雙比較失敗

<TestMethod()> 
    Public Sub Test() 
     Const epsilon As Double = Double.Epsilon 
     Const zero As Double = 0.0 
     Const zeroPlusEpsilon As Double = zero + epsilon 
     Const twentyfive As Double = 25.0 
     Const twentyfivePlusEpsilon As Double = twentyfive + epsilon 

     Assert.IsTrue(zero < zeroPlusEpsilon) 

     Assert.IsTrue(twentyfive < twentyfivePlusEpsilon) ' <-- This is failing. 
    End Sub 

回答

2

其原因是,25.0 + Double.Epsilon產量25.0即使Double.Epsilon是大於零。那是因爲Double是有限的。

您可以找到更詳細的解釋:

Why does adding double.epsilon to a value result in the same value, perfectly equal?


除此之外,不與值類型使用Assert.AreSame。如果您使用價值類型Assert.AreSame他們被裝箱。而是使用Assert.AreEqual

Assert.AreEqual(twentyfive, twentyfivePlusEpsilon) 

相關:What's the difference between Assert.AreNotEqual and Assert.AreNotSame?

+0

好點,我的問題,以配合我的真正的問題略有改變。 – user4388177 2015-03-31 14:15:21

+0

@ user4388177:查看我已鏈接的問題的答案。 – 2015-03-31 15:04:00