【发布时间】:2013-10-14 10:52:45
【问题描述】:
我完全无法理解。这里有什么问题?
我尝试输入 1.0、1.0f、(CGFloat) 1.0 和 (CGFloat)(2.0 - 1.0)。每次都是同样的错误。
【问题讨论】:
标签: xctest
我完全无法理解。这里有什么问题?
我尝试输入 1.0、1.0f、(CGFloat) 1.0 和 (CGFloat)(2.0 - 1.0)。每次都是同样的错误。
【问题讨论】:
标签: xctest
我建议为此使用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, @"");
它现在似乎工作得很好......
【讨论】: