2010-08-19 68 views
3

我有在C++,Visualstudio中比較NAN值的問題。 我需要在我的代碼中處理零分區。 如果我得到零除,我想分配NAN結果。 在稍後的時間點檢查,結果是否爲NAN。 但是,在稍後的時間點,NAN比較失敗,即使我按如下所示分配了quiet_Nan()。如何知道雙變量中NAN值的存在?

double d = std::numeric_limits<double>::quiet_NaN(); 
if(d == std::numeric_limits<double>::quiet_NaN()) 
{ 
    cout<<" NAN "; 
} 
else 
{ 
    cout<<" Number"; 
} 

我知道無法比較浮動值是否相等。我嘗試了d和quiet_Nan()之間的差異,並嘗試使用<運算符與浮點數進行比較。 我看到了幾個帖子,但無法得到如何比較雙重價值。

如何知道雙變量中NAN值的存在?

+0

通常會有一些函數稱爲'isNan'或其他東西。 – leppie 2010-08-19 10:55:20

+0

[在C++中檢查雙精度(或浮點數)是否爲可能的重複](http://stackoverflow.com/questions/570669/checking-if-a-double-or-float-is-nan-in-c ) – kennytm 2010-08-19 12:02:23

回答

3

我不認爲目前的標準庫提供任何is_nan實現你需要使用第三方lib或卷自己

浮點值可以比較相等,這只是很少有用,但是這是那些地方是有用的一個,你要的是一樣的東西:

template <T> 
bool is_nan(T d) 
{ 
    return std::numeric_limits<T>::has_quiet_NaN && d != d; 
} 

哪些檢查你的機器上有一個合適的NaN值然後使用NaN!= NaN爲真的事實!

想必這個應該提供這個地方嗎?

2

具有C++無論如何,而是沒有經歷:

如果(d ==的std :: numeric_limits :: quiet_NaN())

你應該叫:

如果(STD: :numeric_limits :: quiet_isNaN(d))

如果存在這樣的方法。

記住,如果「d」爲NaN,d = = d計算結果爲FALSE

+0

是的。 'is_nan'或者語言等價的方式。 NaN永遠是每個定義的!=其他任何東西,甚至本身。 – 2010-08-19 10:58:23

+0

quiet_isNan()方法不可用。我正在使用VS2008。 – bjskishore123 2010-08-19 11:15:49

+0

測試時,你不應該在乎它是否安靜。 isnan()應該足夠了。 – MSalters 2010-08-19 11:21:08

相關問題