2016-01-19 105 views
0

我有我分析這段代碼,但我不明白這行:雙比較本身

double level = 0; 

... 

if (!(level == level) && !(level < level) && !(level > level)) 
    exit(0); 

我認爲它是關於雙比較對象。任何想法是什麼?

+0

查看NAN(非數字),這將使該表達式返回true。 –

+4

誰寫的? – i486

+0

我的第一個想法是,他們試圖看看'級別'是否爲NaN。我假設你有一些中介代碼會改變'level'的值嗎?你從哪裏得到這個代碼?它有什麼作用? –

回答

5

這是一個相當過度設計的測試非數字(NaN)。

NaN是一個特殊的浮點值。 (並非所有的浮點類型都有它,但最常見的一種 - IEEE754 - 確實如此。)

它被定義爲比較不等於所有其他數字,包括它本身。

它也被定義爲不大於或不小於任何其他數字,包括其本身。 (雖然這個後續測試是多餘的)。

從C++ 11開始,您可以改爲使用std::isnan(level)。在此之前,我最喜歡的測試方式是使用相當簡單的表達level != level