2012-08-09 3 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

이제 진짜 참고 : 귀하의 질문은 무엇입니까? 당신은 이것이 "이중 쟁점"이라는 것을 알고 있습니다 - 우리가 그것에 대해 무엇을하기를 원하는가? –

+0

잘'0.2d * 0.8d'는 정확히 0.16d가 아닙니다! ! 십진수를 사용하면이 문제를 해결할 수 있습니다. – V4Vendetta

+0

해결책은 무엇입니까? – bayramucuncu

답변

2

NUnit과, 당신은 명시 적으로 허용 오차를 사용하여 부동 소수점 값을 비교할 수 있습니다.

부동 소수점 비교 here에 대한 자세한 정보가 있습니다. 특정 경우

, 나는 당신이 시도하는 것이 좋습니다 :

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

이러한 정밀 문제가 종종 발생했다 : 예상.

분산에서 작은 "분산"을 허용해야합니다 (말장난을 용서하십시오).

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

또는 당신은 세계적으로 (기본적으로는 0.0) 0이 아닌 값으로 GlobalSettings.DefaultFloatingPointTolerance을 설정할 수 있습니다

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