1
當我這樣做:目標C減法
NSLog(@"%i",1.5 - 1.00 == 0.5);
我送1,但是當我這樣做:
NSLog(@"%i",1.33 - 1.00 == 0.33);
我得到0
有沒有什麼辦法來解決這個?
當我這樣做:目標C減法
NSLog(@"%i",1.5 - 1.00 == 0.5);
我送1,但是當我這樣做:
NSLog(@"%i",1.33 - 1.00 == 0.33);
我得到0
有沒有什麼辦法來解決這個?
問題是與浮點計算的精度:你一般應該避免使用==
操作比較平等浮點數和雙精度數,寧願檢查的差異比一個小小量較小(如1E-9
)。
#include <math.h>
...
NSLog(@"%i", abs(((1.33 - 1.00) - 0.33) < 1E-9);
第一個示例,因爲數由2的冪:1 = 2^0
和0.5 = 2^-1
。第二個例子中的數字不能完全分解爲2的冪,所以相等性檢查不起作用。
謝謝,解決了它。 – aeubanks 2012-07-30 21:00:21
每個程序員都應該理解浮點數:http://en.wikipedia.org/wiki/Floating_point#IEEE_754:_floating_point_in_modern_computers總之,1.33 - 1.00不是0.33。 – Almo 2012-07-30 20:54:36
這個問題有多少(變化)的問題已經被問到...沒有努力使用Google ...呃... – 2012-07-30 20:59:06
@ H2CO3問題是,它很難向谷歌解釋你在找什麼,除非你知道要求浮點精度或與之相關的東西。 – dasblinkenlight 2012-07-30 21:07:26