我一直认为NaN有2种:安静和发信号。

但是后来我意识到NAN宏的计算结果都不是。

在Visual C++中,std::numeric_limits<float>::quiet_NaN()显示为1.#QNAN000
在Visual C++中,std::numeric_limits<float>::signaling_NaN()显示为1.#QNAN000
但是在Visual C++中,NAN也显示为-1.#IND0000 ...两者都不是。

  • 那么,NAN是什么常数?是发信号还是无信号?
  • 什么时候应该使用NAN代替其他代码,什么时候应该避免使用它,为什么?
  • 最佳答案

    您的机器没有信令NaN。我假设Q中的#QNAN代表Quiet。检查numeric_limits::has_signaling_NaN。至于signaling_NaN,标准说:



    因此,这可能是必需的,但毫无意义……自然而然的是提供一个安静的NaN。

    我尚未找到QNANIND的权威资源,但它们似乎都是安静的NaN。可能存在数百万个不同的NaN,每个尾数值一个。如果我猜到了,IND可能像是不确定值的错误代码,例如0/0。对于通用的NAN宏来说,这并不是真正合适的选择,但是在以这种方式定义了C数字绑定(bind)之后,它们可能已经陷入困境。

    关于c++ - NaN有2种:signaling_NaN,silent_NaN和…NAN本身?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23861999/

    10-09 13:11