我寫了一段代碼,遇到了一個非常奇怪的問題。即使實際比較結果爲真,兩個浮點數之間的比較也會返回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