我写了一段代码,遇到了一个非常奇怪的问题。即使实际比较结果为真,两个浮点数之间的比较也会返回NO
。我甚至用FLT_EPSILON
作为安全浮点比较。这是代码:目标C:安全浮点数比较奇怪地失败
//To start the process run this:
[self increment:0.0f];
- (void)increment:(float)f {
f += 0.02f;
if ((fabs(f - 1.0f) < FLT_EPSILON)) {
NSLog(@"STOP");
}
else {
NSLog(@"F %f", f);
[self increment:f];
}
}
而且比较总是会失败,代码将进入无限循环。我已经在iOS 7上的32位设备上和iOS 8上的iPhone 5S模拟器上对此进行了测试。
当使用浮点运算时,NSLog不准确。用'printf(“%。10f \ n”,f)替换打印'f'的行可以帮助您进行调试。 – 2014-08-29 07:32:16