2012-07-30 53 views
1

當我這樣做:目標C減法

NSLog(@"%i",1.5 - 1.00 == 0.5); 

我送1,但是當我這樣做:

NSLog(@"%i",1.33 - 1.00 == 0.33); 

我得到0

有沒有什麼辦法來解決這個?

+3

每個程序員都應該理解浮點數: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

+0

這個問題有多少(變化)的問題已經被問到...沒有努力使用Google ...呃... – 2012-07-30 20:59:06

+0

@ H2CO3問題是,它很難向谷歌解釋你在找什麼,除非你知道要求浮點精度或與之相關的東西。 – dasblinkenlight 2012-07-30 21:07:26

回答

2

問題是與浮點計算的精度:你一般應該避免使用==操作比較平等浮點數和雙精度數,寧願檢查的差異比一個小小量較小(如1E-9)。

#include <math.h> 

... 

NSLog(@"%i", abs(((1.33 - 1.00) - 0.33) < 1E-9); 

第一個示例,因爲數由2的冪:1 = 2^00.5 = 2^-1。第二個例子中的數字不能完全分解爲2的冪,所以相等性檢查不起作用。

+0

謝謝,解決了它。 – aeubanks 2012-07-30 21:00:21