2013-03-07 23 views

回答

17

假設IEEE 754浮點表示法,您不能比較兩個NaN值是否相等。 NaN不等於任何價值,包括其本身。但是,您可以從<cmath>頭測試,如果他們都是南帶着std::isnan

if (std::isnan(x) && std::isnan(y)) { 
    // ... 
} 

這僅適用於C++ 11,但是。在C++ 11之前,Boost Math Toolkit提供了一些floating point classifiers。或者,您可以檢查是否值是NaN通過與自身比較:

if (x != x && y != y) { 
    // ... 
} 

由於NaN的是,不等於自己唯一的價值。過去,某些編譯器搞砸了,但目前我不確定它的狀態(它似乎與GCC正常工作)。

MSVC提供了一個_isnan函數。

最後的選擇是假設你知道表示是IEEE 754並做一些檢查。顯然這不是最便攜的選擇。

+0

我已經添加了boost解決方案作爲另一個答案。 – 2013-03-07 10:53:16

+0

@BartekBanachewicz啊!我只是把它添加到我的! – 2013-03-07 10:54:20

+0

謝謝大家。如果問題沒有任何意義,我很抱歉。只是急於想知道這是否可能。「思南」功能將爲我的案子做點事情。 – CodeRider 2013-03-07 12:14:26

2

任何給定的NaN都不等於任何東西,它將永遠不會等於任何其他NaN,因此將它們相互比較是徒勞無益的。

從GNU文檔:

楠無序的:它並不比任何東西,包括本身等於,大於或小於。如果x的值是NaN,則x == x爲假。 source

+1

@Aki erm,0.0/0.0是NaN。我在這裏看不到什麼是「相反的」。 – 2013-03-07 10:47:51

3

關於pre-C++ 11,there's a boost for that, too

#include <boost/math/special_functions/fpclassify.hpp> 

template <class T> 
bool isnan(T t); // NaN.