2012-08-09 80 views
1

我正在测试方差(单元)方法,但出现双重问题。单元测试双数字失败

public double Variance() 
    { 
     return Probablity * (1 - Probablity); 
    } 

    [Test] 
    public void Variance_WithSuccessProbablity02_Returns016() 
    { 
     var bernoulli = new BernoulliDistribution(0.2); 

     Assert.AreEqual(bernoulli.Variance(), 0.16); 
    } 

该测试结果是返回失败。 失败:预期:0.160000000000003d但是0.16d

+1

现在真正的笔记:什么是你的问题?您意识到这是一个“双重问题” - 您希望我们对此做些什么? – 2012-08-09 09:40:29

+0

well'0.2d * 0.8d'不是0.16d! !但使用小数可以帮助解决这个问题 – V4Vendetta 2012-08-09 09:41:19

+0

解决方案是什么? – bayramucuncu 2012-08-09 09:53:52

回答

2

在NUnit的,既可以比较浮动使用一个明确的公差点值:

Assert.AreEqual(double expected, double actual, double tolerance); 

或可以全局设置GlobalSettings.DefaultFloatingPointTolerance到一个非零值(默认为0.0)。

有更多浮点比较信息here

在您的具体情况,我建议你试试这个:

Assert.AreEqual(bernoulli.Variance(), 0.16, 1.0e-9); 
1

当使用浮动或双打时,经常出现这样的精度问题。

您需要考虑到您的差异中的小“差异”(原谅双关语)。

1
Assert.IsTrue(Math.Abs(bernoulli.Variance() - 0.16d) < 0.00001d);