c++ - 如何检查 Boost 测试框架中 double 值的前 15 个相关数字是否相同?

标签 c++ unit-testing boost boost-test

我尝试使用似乎是为这项工作设计的:BOOST_CHECK_CLOSE,所以我进行了以下测试:

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
}

但是,第一次检查失败并出现错误:

/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%

当我计算时,我得到:

(0.027671392189542815-0.027671392189542805)/0.027671392189542805=0.00000000000000036138406

小于 1e-14。我在这里做错了什么?

最佳答案

公差以百分比的形式指定,您偏离了 100。修复:

double TOLERANCE=1e-12;   // Percent

关于c++ - 如何检查 Boost 测试框架中 double 值的前 15 个相关数字是否相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14520752/

相关文章:

c++ - C++中的简单事件系统

javascript - 无法让 Jasmine 测试成功调用注入(inject)的服务

c++ - Boost Asio 如何在不使用 SSL 的 SSL 套接字上读/写?

C++ Boost - 包含类层次结构对象的类的序列化

c++ - 模板类 vector 删除不起作用

c++ - 执行动态创建的按钮

c++ - C++ 中的 'static' 关键字

unit-testing - 如何在使用 throw-with-msg 的测试中捕获 IllegalArgumentException?

python - Python unittest 会立即报告错误吗?

c++ - 将 std::vector<boost::shared_ptr<T>> 转换为 std::vector<T*> 的优雅解决方案