我在使用Google Test 1.7.0测试浮点值时遇到了一些问题。
我的断言看起来像这样:
ASSERT_NEAR(124691356.375f, actual, DELTA);
测试失败,出现以下错误:
124691356.375f与实际之间的差异为3.625,超过DELTA,其中 124691356.375f评估为124691360 ,实际评估为124691356.375,DELTA评估为0.0625。
发生了什么? actual
,预期结果显然在0.0625的允许误差范围内。为什么gtest用这种方式评估浮点文字124691356.375f
?
更新: DELTA
和actual
的类型为double,预期值为浮点字面值。如果我将文字更改为double,或将其他参数更改为float(以便所有内容都是相同类型),则测试通过。问题仍然存在 - 当类型不匹配时导致这种行为的原因是什么?
答案 0 :(得分:2)
124691356.375f
是单精度浮点数,有7-8个有效十进制数字。所以它是"圆形"到124691360,这不在允许的误差范围内。您应该可以使用124691356.375lf
。另请参阅wikipedia和this question。