我有轉換爲雙像這樣的字符串:「-Weverything」屈服「比較==浮點或=不安全!」
double d = [string doubleValue];
爲doubleValue
的文件告訴我們,一旦溢出,此方法返回HUGE_VAL
或-HUGE_VAL
。這是我檢查這個早些時候:
if (d == HUGE_VAL || d == -HUGE_VAL)
//overflow
現在,由於加入了新的「-Weverything」警告標誌,則編譯器現在抱怨
Comparing floating point with == or != is unsafe
我怎樣才能解決這個問題?如何應該我在做這些比較?
我也有關於比較兩個「正常」的浮點數(即不是「HUGE_VAL」的)同樣的問題。例如,
double a, b;
//...
if (a != b) //this will now yield the same warning
//...
這應該如何解決?
有道理。另一方面,在某些方面,似乎也有道理對此提出警告。有什麼辦法可以更明確地告訴編譯器:「是的,我絕對相信我將這些浮點數相互比較,並且不會警告我。」 ?所以在我確定的情況下,警告不會出現。在其他情況下,我會做epsilon測試。 – NoobOverflow 2012-07-10 21:37:53
@NoobOverflow如果你真的想讓編譯器很開心,可以測試'd> = HUGE_VAL || d <= -HUGE_VAL'。它不使用'=='計算相同的東西。但我建議不要使用警告。 – 2012-07-10 21:47:22
@NoobOverflow實際上,我之前的建議使得代碼不易讀,但是如果Objective-C有一個函數「is_infinity」,使用它會使代碼**更具可讀性。該函數的規範應該是它爲'HUGE_VAL'和'-HUGE_VAL'這兩個值準確地返回true,我建議你使用它。 – 2012-07-10 21:58:09