6

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

我试过输入1.0,1.0f和. 每次都是同样的错误。(CGFloat) 1.0(CGFloat)(2.0 - 1.0)

来自 xcode 的屏幕截图

4

3 回答 3

18

我建议使用FLT_EPSILON这个:

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

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

于 2014-02-20T05:08:24.913 回答
6

数字的小数部分 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 来比较浮点数。

于 2013-10-08T08:03:54.203 回答
0

我改为

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

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

于 2013-10-07T18:49:23.513 回答