BOOST_CHECK_CLOSE_FRACTION 问题
我正在使用 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 的方式有问题吗?
I'm using the Boost::Test library, and I am trying to check if an actual percent value is close to the expected value:
BOOST_CHECK_CLOSE_FRACTION(
items[i].ExpectedPercent,
items[i].ActualCount / totalCount,
0.05);
For some reason this check fails even when the values are close enough:
difference between items[i].ExpectedPercent{0.40000000000000002}
and items[i].ActualCount / totalReturned{0.42999999999999999}
exceeds 0.050000000000000003
Is this a problem with Boost or a problem with how I am using Boost?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
经过一些测试,发现 BOOST_CHECK_CLOSE_FRACTION 的文档不正确。容差应指定为预期值的一部分。
那么,TFAE:
After some testing, it turns out that the documentation for BOOST_CHECK_CLOSE_FRACTION is incorrect. The tolerance should be specified as a fraction of the expected value.
So, TFAE:
这是你如何使用 boost 的问题。
最后一个参数是百分比容差,而不是绝对方差值。 0.4 的 5% 是 0.02。
It is a problem with how you are using boost.
The last argument is a percent tolerance, not an absolute variance value. 5% of 0.4 is 0.02.
显然,如果您检查某些值是否接近 0,则 BOOST_CHECK_CLOSE 和 BOOST_CHECK_CLOSE_FRACTION 将不起作用。然后您可以使用:
Obviously BOOST_CHECK_CLOSE and BOOST_CHECK_CLOSE_FRACTION won't work if you check if something is near 0. Then you can use: