我根本无法理解这一点。这有什么问题?
我尝试输入1.0
,1.0f
,(CGFloat) 1.0
和(CGFloat)(2.0 - 1.0)
。每次都出现同样的错误。
答案 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, @"");
现在似乎工作得很好......