2013-01-25 5 views
1

나는 작업을 위해 설계된 것 같다 무엇을 사용하려고 : BOOST_CHECK_CLOSE, 그래서 나는 다음과 같은 시험이 있습니다부스트 테스트 프레임 워크에서 이중 값의 처음 15 자리가 동일한 지 어떻게 확인할 수 있습니까?

/home/ga1009/PhD/cpp/grzesLib/test/multivariatenormaltests.cpp(36): error in "MultivariateNormalDensityTest": difference{3.76141e-14%} between 0.027671392189542814988{0.027671392189542815} and mnd(Eigen::Vector3d(0.0, 1.0, 2.0)){0.027671392189542805} exceeds 1e-14% 

I을 :

BOOST_AUTO_TEST_CASE(MultivariateNormalDensityTest) 
{ 
    double TOLLERANCE=1e-14; 

    Eigen::Vector3d mu(0.0, 1.0, 2.0); 
    Eigen::Matrix3d sigma; 
    sigma << 2.0, 1.0, 0.5, 
      1.0, 2.3, 0.7, 
     0.5, 0.7, 1.7; 

    MultivariateNormalDensity<3> mnd(mu, sigma); 

    BOOST_CHECK_CLOSE(0.027671392189542814988, mnd(Eigen::Vector3d(0.0, 1.0, 2.0)), TOLLERANCE); 
    BOOST_CHECK_CLOSE(0.0027063822550173750707, mnd(Eigen::Vector3d(2.0, 1.0, 0.5)), TOLLERANCE); 
    BOOST_CHECK_CLOSE(0.024708597088231143424, mnd(Eigen::Vector3d(0.5, 1.5, 2.5)), TOLLERANCE); 
    BOOST_CHECK_CLOSE(0.026554587643995836849, mnd(Eigen::Vector3d(-0.3, 0.6, 1.8)), TOLLERANCE); 
    //examples calculated using R 
} 

그러나, 첫 번째 검사 오류와 함께 실패를 수학은 내가 할 :

(0.027671392189542815-0.027671392189542805)/0.027671392189542805=0.00000000000000036138406 

1e-14 미만입니다. 여기서 내가 뭘 잘못하고 있니?

+0

나는 도서관을 모르는 것하지만 허용 오차는 입력을 기준으로 추측에는 요 가치 ie 그것은 당신이 0.027 * 1e-14 = 2.7e-16 내에 있는지 실제로 확인하고 있습니다. (그리고 '허용 오차'에는 단 하나의 'l'이 있습니다.) – Rup

답변

3

허용 오차는 비율로 지정, 당신은 (100) 수정에 의해 떨어져있어 :

double TOLERANCE=1e-12; // Percent 
+1

와우, 나는 개발자가 실제 비율로 넣을 것이라고 생각하지 않습니다. 감사. – Grzenio