2017-01-09 208 views

回答

5

您可以使用std::nan,例如,

#include <iostream> 
#include <cmath> 

int main() 
{ 
    double a = -std::nan("1"); 

    std::cout << a << std::endl; 
} 

LIVE DEMO

+0

我會標記這個問題的答案,但我說,你只需要使用算術,所以答案是(INFINITY_NUMBER/INFINITY_NUMBER)= -NNN,但我認爲你只是因爲我的英語不好導致這個答案 –

+0

對不起,是的,我可能沒有按照你的意圖解釋你的問題。這個限制的原因是什麼?性能?你能不能簡單地把這個值初始化爲一個常量? –

2

如果您的平臺使用IEEE754浮點數,則0.0/0.0將評估爲NaN。

或者,您可以使用std::numeric_limits<double>::quiet_NaN(),在您的平臺上檢查std::numeric_limits<double>::has_quiet_NaNtrue

真的沒有這樣的事,作爲一個簽署NaN,雖然NaN表示可能包含一個標誌位,它可以由std::cout被拾起。也許在您的平臺上-0.0/0.0生成「負面」NaN。對於aNaN的情況,cout << a的結果完全依賴於編譯器。

+0

這是唯一的'constexpr'方式。 – Orient

+0

確實。我不喜歡'std :: nan(「1」);'因爲這個原因。 – Bathsheba

0

爲了得到一個負楠,單處或者具有0x80000000的NaN的表示。你必須把這個地址轉換成一個無符號的char *或long long *,或者當然。