6

私はこれをまったく理解できません。ここで何が問題なのですか?

1.0、、、1.0fと入力してみまし(CGFloat) 1.0(CGFloat)(2.0 - 1.0)。毎回同じエラー。

xcode からのスクリーンショット

4

3 に答える 3

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すらありません:)

編集:そしてもちろん、浮動小数点数の比較にはイプシロンを使用します。

于 2013-10-08T08:03:54.203 に答える
0

に変更しました

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

そして、今はうまく機能しているようです...

于 2013-10-07T18:49:23.513 に答える