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

4

3 回答 3

2

在 NUnit 中,您可以使用显式容差比较浮点值:

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

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

这里有更多关于浮点比较的信息。

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

Assert.AreEqual(bernoulli.Variance(), 0.16, 1.0e-9);
于 2012-08-09T09:48:17.400 回答
1

使用浮点数或双精度数时经常会出现此类精度问题。

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

于 2012-08-09T09:38:58.977 回答
1
Assert.IsTrue(Math.Abs(bernoulli.Variance() - 0.16d) < 0.00001d);
于 2012-08-09T09:48:29.740 回答