代码之家  ›  专栏  ›  技术社区  ›  schoetbi

GTC(C++)与nUnE(Cα)中的双比较的差异

  •  4
  • schoetbi  · 技术社区  · 14 年前

    我已经完成了将带有gtest测试的c++项目移植到带有nunit测试的c#项目的工作。现在我遇到了浮点精度的问题。

    在nunit测试中,我一直不正常(红色)

    Assert.AreEqual(0.7, 7 * 0.1); 
    

    在gtest测试中,我有:

    ASSERT_DOUBLE_EQ(0.7, 7 * 0.1);
    

    ???

    4 回复  |  直到 14 年前
        1
  •  2
  •   Exa    14 年前

    或者,您可以添加第三个参数,即两个值之间的最大差值,如您所知 here .

    public static void AreEqual (
        double expected,
        double actual,
        double delta
    )
    

    验证两个指定的双精度 等于或在规定范围内 如果它们不在 相互之间的规定精度。

        2
  •  4
  •   rold2007    6 年前

    谷歌测试 ASSERT_DOUBLE_EQ() https://github.com/google/googletest/blob/master/googletest/docs/advanced.md#floating-point-comparison ). 努尼特可能正在进行精确的比较。

        3
  •  1
  •   Community CDub    8 年前

    永远不要比较浮点数是否相等!十进制小数(如0.1)不能表示成ieee浮点数而不损失小的精度。看起来像0.7的可能是0.6999999或者其他的。他们是不同的数字。你应该使用epsilon技巧:考虑 a == b if abs(a - b) <= epsilon

    阅读本文和其他许多文章^

    http://docs.sun.com/source/806-3568/ncg_goldberg.html

    What's wrong with using == to compare floats in Java?

        4
  •  0
  •   Douglas    14 年前

    尝试 Assert.AreApproximatelyEqual 当比较浮动时。