我完全无法理解这一点。这里有什么问题?
我试过输入1.0
,1.0f
和. 每次都是同样的错误。(CGFloat) 1.0
(CGFloat)(2.0 - 1.0)
我建议使用FLT_EPSILON
这个:
XCTAssertEqualWithAccuracy(mov.lastDelta, 0.0f, FLT_EPSILON, @"");
除非您有某些理由需要更大的 epsilon。
数字的小数部分 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 来比较浮点数。
我改为
mov.value = 8.9
XCTAssertEqualWithAccuracy(mov.lastDelta, 0.0f, 0.001, @"");
它现在似乎工作得很好......