我一直以为有两种南的:安静和信号。
但后来我意识到,NAN宏的计算值两者都不算。
在VisualC++中,std::numeric_limits<float>::quiet_NaN()显示为1.#QNAN000。
在VisualC++中,std::numeric_limits<float>::signaling_NaN()显示为1.#QNAN000。
但在VisualC++中,NAN也显示为-1.#IND0000.这两种情况都不是。
NAN常数?是信号还是非信号?NAN而不是其他的,什么时候应该避免它,为什么?发布于 2014-05-26 02:49:07
您的机器没有信令NaN。我认为Q in #QNAN代表的是安静。检查numeric_limits::has_signaling_NaN。至于signaling_NaN,标准是这样的:
对于has_signaling_NaN != false的所有专门化都有意义。is_iec559 != false所需的专门化。
因此,它可能是必需的,但没有意义的…。自然要做的事情是提供一个安静的NaN。
我还没有找到QNAN与IND的权威资源,但它们似乎都是安静的NaNs。潜在有数以百万计的不同的NaNs,每个尾数值一个。如果我猜的话,IND可能就像indeterminate值的错误代码,例如0/0。对于一般的NAN宏来说,这并不是一个合适的选择,但是在以这种方式定义C数值绑定之后,它们可能会被困在这个宏中。
https://stackoverflow.com/questions/23861999
复制相似问题