升压单元测试:BOOST_CHECK_CLOSE返回1.#INF%

时间:2015-03-12 06:48:45

标签: c++ unit-testing boost

我使用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?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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