我正在测试方差方法(单位),但发生了双重问题。
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
答案 0 :(得分: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)
使用浮动或双打时经常会出现这种精确问题。
你需要从你的方差中允许一个小的“方差”(借口双关语)。
答案 2 :(得分:1)
Assert.IsTrue(Math.Abs(bernoulli.Variance() - 0.16d) < 0.00001d);