提升单元测试:BOOST_CHECK_CLOSE回报 1.#INF%

Boost unittest: BOOST_CHECK_CLOSE returns 1.#INF%

本文关键字:CLOSE 回报 #INF% CHECK 单元测试 BOOST      更新时间:2023-10-16

我正在使用 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 版本。

这是我应该期待的结果吗?我想这些值彼此足够接近,它应该返回成功。提升在内部除以 0.0 吗?

您可以使用

BOOST_CHECK_SMALL来检查接近零。有关更多背景信息,请参阅:增强 UTF 文档、有关浮点比较算法的文章。

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

或者,正如这个答案如此简洁地解释的那样 - 零与任何东西都不接近。