我一直认为 NaN 有两种:安静的和信号的。
但后来我意识到 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
而不是其他,我什么时候应该避免它,为什么?
最佳答案
您的机器没有信号 NaN
。我猜想 #QNAN
中的 Q
代表安静。检查numeric_limits::has_signaling_NaN
。至于signaling_NaN
,标准是这样说的:
Meaningful for all specializations for which has_signaling_NaN != false. Required in specializations for which is_iec559 != false.
因此,它可能是必需的,但毫无意义……自然的做法是提供一个安静的 NaN。
我还没有找到 QNAN
与 IND
的权威资源,但它们似乎都是安静的 NaN。可能有数百万个不同的 NaN,每个尾数值一个。如果我猜测,IND
可能类似于 ind确定值的错误代码,例如0/0。对于通用 NAN
宏来说,这并不是一个合适的选择,但在以这种方式定义 C 数字绑定(bind)后,他们可能会一直坚持使用它。
关于c++ - NaN 有 2 种 : signaling_NaN, Quiet_NaN,还有... NAN 本身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23861999/