【问题标题】:Boost unittest: BOOST_CHECK_CLOSE returns 1.#INF%提升单元测试:BOOST_CHECK_CLOSE 返回 1.#INF%
【发布时间】:2015-03-12 06:48:44
【问题描述】:

我正在使用 Boost 单元测试框架来比较双打。结果符合预期,但我猜 BOOST_CHECK_CLOSE 无法正确识别它们。代码实质如下:

BOOST_AUTO_TEST_CASE(FooBarTest)
{
    double foo = 2.2500000047015632e-006;
    double bar = 0.0;
    double tolerance = 90.0;
    BOOST_CHECK_CLOSE(foo, bar, tolerance);
}

此操作失败并显示以下消息:

error in [...]: difference{1.#INF%} between foo{2.2500000047015632e-006} and bar{0} exceeds 90%

我正在使用带有 VC100(Visual Studio 10 编译器)的 Boost 1.55。我正在编译 Win32 Release。

这是我应该期待的结果吗?我想这些值彼此足够接近,它应该返回成功。 Boost 内除是否为 0.0?

【问题讨论】:

    标签: c++ unit-testing boost


    【解决方案1】:

    您可以使用 BOOST_CHECK_SMALL 来检查接近于零。 有关更多背景信息,请参阅:Boost UTF documentation, article on floating-point comparison algorithms

    【讨论】:

      【解决方案2】:

      那是因为bar 为零。 BOOST_CHECK_CLOSE 检查这两个值是否“接近”,即在您的情况下,是否彼此接近 90%。为此,您使用除法,并且不能除以 0。

      或者,正如this answer 如此简洁地解释的那样 - 零并不接近任何东西。

      【讨论】:

      • 感谢您的链接,我在搜索时没有找到任何可用的东西
      猜你喜欢
      • 2014-03-13
      • 1970-01-01
      • 1970-01-01
      • 2014-11-08
      • 1970-01-01
      • 1970-01-01
      • 2020-06-14
      • 2020-11-02
      • 1970-01-01
      相关资源
      最近更新 更多