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