【问题标题】:How to compare CGFloat in XCTestCase?如何比较 XCTestCase 中的 CGFloat?
【发布时间】:2013-10-14 10:52:45
【问题描述】:

我完全无法理解。这里有什么问题?

我尝试输入 1.01.0f(CGFloat) 1.0(CGFloat)(2.0 - 1.0)。每次都是同样的错误。

【问题讨论】:

    标签: xctest


    【解决方案1】:

    我建议为此使用FLT_EPSILON

    XCTAssertEqualWithAccuracy(mov.lastDelta, 0.0f, FLT_EPSILON, @"");

    除非您有某些理由需要更大的 epsilon。

    【讨论】:

      【解决方案2】:

      数字的小数部分 0.9 不能用浮点数准确表示。 会发生一些舍入,这可能是失败的原因。

      0.9 = (1/2) + (1/4) + (1/8) + (1/64) + (1/128) + (1/1024) + (1/2048) + (1/ 16384) + (1/32768) + (1/262144) 等等 = 0,8999978005 等等。

      在人眼看来是圆形的分数在二进制系统中可能不是圆形的。

      0.5 是 cpu = (1/2) 的整数。

      0.75 是 cpu = (1/2) + (1/4) 的四舍五入。

      0,9072265625 也是圆的 ((1/2) + (1/4) + (1/8) + (1/32) + (1/1024) )

      但不是 0.9 或 0.1。甚至没有 0.2 :)

      编辑:当然,使用 epsilon 来比较浮点数。

      【讨论】:

        【解决方案3】:

        我改成

        mov.value = 8.9
        XCTAssertEqualWithAccuracy(mov.lastDelta, 0.0f, 0.001, @"");
        

        它现在似乎工作得很好......

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-04
          • 1970-01-01
          • 2011-02-09
          • 2021-03-06
          • 2018-12-02
          相关资源
          最近更新 更多