奇怪的谷歌测试失败与浮点数

Strange Google Test failure with floating point numbers

本文关键字:失败 浮点数 测试 谷歌      更新时间:2023-10-16

我在测试浮点值与 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,预期值为浮点文本。 如果我将文字更改为双精度,或将其他参数更改为浮点数(以便所有内容都属于同一类型),则测试通过。 问题仍然存在 - 当类型不匹配时,是什么导致了这种行为?

>124691356.375f是一个单精度浮点数,具有 7-8 个有效的十进制数字。因此,它被"四舍五入"为124691360,这不在允许的误差范围内。您可能应该使用 124691356.375lf .另请参阅维基百科和这个问题。