2012-03-12 35 views
1

我嘗試了所有檢測奇數(NaN,QNaN等)的常規技巧,我似乎無法檢測到-1。#IND。任何幫助將不勝感激。如何在C++中檢測/陷阱-1。#INDI

+2

可能重複(http://stackoverflow.com/questions/570669/checking-if-a-double-or-float-is- nan-in-c) – 2012-03-12 14:04:09

+0

另外,請注意@Cheers和hth的答案。 - 在標記的副本中,Alf是正確的。 – 2012-03-12 14:04:40

+0

謝謝 - 我們可以關閉這個。 – fbl 2012-03-12 15:45:37

回答

0

您是否嘗試過的號碼與自己進行比較:

if (x != x) 
    assert(!"nan"); 

或者乾脆

assert(x==x); 

你有什麼正常的招數?

此外,奇數是1,3,5,...,如在偶數相反。你在談論我假設的NaN。 [檢查如果一個雙(或浮動)爲NaN在C++]的

+1

我嘗試過將它與自己比較...適用於NaN,QNan和INF ...不是IND ... – fbl 2012-03-12 14:05:34

+0

@Luchian - 他的意思是奇怪,因爲在奇怪/不正常 – JTeagle 2012-03-12 17:11:50

0
union _IEEESingle 
{ 
    float Float; 
    struct 
    { 
     unsigned int Frac : 23; 
     unsigned int Exp : 8; 
     unsigned int Sign : 1; 
    } IEEE; 
};  

bool isQnan(float in) 
    { 
     return(reinterpret_cast<_IEEESingle*>(&in)->IEEE.Exp == (1u << 8)-1 && 
      reinterpret_cast<_IEEESingle*>(&in)->IEEE.Frac); 
    }