在GTest中,如何检查非常接近于0的数字? EXPECT_FLOAT_EQ不起作用

7

我有一些计算(a)sin/(a)cos值的代码,这些值应该非常接近于0,但是当我执行时

EXPECT_FLOAT_EQ(my_computed_var, 0);

我遇到如下错误:

/path/to/my/test.cpp:148: Failure
      Expected: my_computed_var
      Which is: 9.9920072e-16
      To be equal to: 0

我该怎么做?其他数字也会出现这种类型的“错误”:-4.3711388e-08

寻求具体建议和处理此类浮点错误的一般信息。

1个回答

10
请使用EXPECT_NEARFloatEq匹配器替代。浮点数宏说明EXPECT_FLOAT_EQ EXPECT_DOUBLE_EQ ASSERT_FLOAT_EQASSERT_DOUBLE_EQ会验证两个float / double值是否几乎相等,并且:

"几乎相等"是指两个值彼此之间相差不超过4 ULP。

其中ULP代表最后位的单位


你有没有想过哪些操作适合使用expect_float_eq?或者如何知道我是否“做错了”? - xaxxon
@xaxxon 我添加了一些来自该文档的解释 - Danh
谢谢,那很有帮助。 - xaxxon
1
"Floating-Point-Macros"的链接已失效。请使用以下链接:https://github.com/google/googletest/blob/master/googletest/docs/advanced.md#floating-point-comparison - Helmut Grohne
1
更新的链接:https://github.com/google/googletest/blob/master/docs/advanced.md#floating-point-comparison,https://github.com/google/googletest/blob/master/docs/gmock_cheat_sheet.md#floating-point-matchers-fpmatchers - Bruce Christensen
如果错误信息能够说“如果你希望这个测试不会失败,你应该使用“EXACT_TEST_TO_USE(...,VALUE_TO_USE)”来通过当前的值”,那就太好了。我甚至都不记得我提出这个问题的情况,但回过头来看,9e-16无法通过这个测试感觉很疯狂。 - xaxxon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接