我一直认为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。
我尚未找到QNAN
和IND
的权威资源,但它们似乎都是安静的NaN。可能存在数百万个不同的NaN,每个尾数值一个。如果我猜到了,IND
可能像是不确定值的错误代码,例如0/0。对于通用的NAN
宏来说,这并不是真正合适的选择,但是在以这种方式定义了C数字绑定(bind)之后,它们可能已经陷入困境。
关于c++ - NaN有2种:signaling_NaN,silent_NaN和…NAN本身?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23861999/