C++ BOOST\u CHECK\u CLOSE\u分数有问题

C++ BOOST\u CHECK\u CLOSE\u分数有问题,c++,boost,boost-test,C++,Boost,Boost Test,我正在使用Boost::Test库,并尝试检查实际百分比值是否接近预期值: BOOST_CHECK_CLOSE_FRACTION( items[i].ExpectedPercent, items[i].ActualCount / totalCount, 0.05); 由于某些原因,即使值足够接近,该检查也会失败: difference between items[i].ExpectedPercent{0.40000000000000002} and items[i

我正在使用Boost::Test库,并尝试检查实际百分比值是否接近预期值:

BOOST_CHECK_CLOSE_FRACTION(
    items[i].ExpectedPercent,
    items[i].ActualCount / totalCount,
    0.05);
由于某些原因,即使值足够接近,该检查也会失败:

difference between items[i].ExpectedPercent{0.40000000000000002}
   and items[i].ActualCount / totalReturned{0.42999999999999999}
                                    exceeds 0.050000000000000003

这是Boost的问题还是我如何使用Boost的问题?

这是您如何使用Boost的问题


最后一个参数是公差百分比,而不是绝对方差值。0.4的5%等于0.02。

经过一些测试后,发现增压检查关闭分数的文档不正确。公差应指定为预期值的分数

因此,TFAE:

BOOST_CHECK(abs(x - y) < (min(x, y) * 0.1));
BOOST_CHECK_CLOSE(x, y, 10);
BOOST_CHECK_CLOSE_FRACTION(x, y, 0.1);
BOOST_检查(abs(x-y)<(min(x,y)*0.1));
增压检查关闭(x,y,10);
增压检查关闭分数(x,y,0.1);

显然,如果检查某个值是否接近0,则BOOST\u CHECK\u CLOSE和BOOST\u CHECK\u CLOSE\u分数将不起作用。然后您可以使用:

BOOST_CHECK(abs(x - y) < accurancy);
BOOST\u检查(abs(x-y)
我建议您检查Boost Trac中是否有相关报告,如果没有,请在那里报告或将您的评论发送到Boost邮件列表。