如何比较XCTestCase中的CGFloat?

时间:2013-10-07 18:34:13

标签: xctest

我根本无法理解这一点。这有什么问题?

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

Screenshot from xcode

3 个答案:

答案 0 :(得分:18)

我建议您使用FLT_EPSILON

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

除非你有某些理由要求更大的epsilon。

答案 1 :(得分:5)

您的数字的小数部分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)的圆数。

对于cpu =(1/2)+(1/4),

0.75是圆的。

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

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

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

答案 2 :(得分:0)

我改为

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

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