【问题标题】:Strange Google Test failure with floating point numbers浮点数奇怪的谷歌测试失败
【发布时间】:2015-02-14 01:29:42
【问题描述】:

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

【问题讨论】:

    标签: c++ floating-point googletest


    【解决方案1】:

    124691356.375f 是一个单精度浮点数,有 7-8 位有效十进制数字。所以它被“四舍五入”到 124691360,这不在允许的误差范围内。您可能应该使用124691356.375lf。另见wikipediathis question

    【讨论】:

    • 谢谢!真正的问题是actual 的计算将结果存储在一个双精度数中,它具有足够的精度,不会执行相同的“舍入”。
    • 或者完全省略文字的类型说明符 - 那么它将是double
    猜你喜欢
    • 2010-09-21
    • 2020-06-22
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    相关资源
    最近更新 更多