2017-01-09 202 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 *,或者当然。