使用浮点数进行奇怪的Google测试失败

时间:2014-12-15 20:41:31

标签: c++ floating-point googletest

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

更新: DELTAactual的类型为double,预期值为浮点字面值。如果我将文字更改为double,或将其他参数更改为float(以便所有内容都是相同类型),则测试通过。问题仍然存在 - 当类型不匹配时导致这种行为的原因是什么?

1 个答案:

答案 0 :(得分:2)

124691356.375f是单精度浮点数,有7-8个有效十进制数字。所以它是"圆形"到124691360,这不在允许的误差范围内。您应该可以使用124691356.375lf。另请参阅wikipediathis question