我一直认为有两种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
代替其他人,何时应该避免使用{?
答案 0 :(得分:2)
您的机器没有信号NaN
。我认为Q
中的#QNAN
代表安静。检查numeric_limits::has_signaling_NaN
。至于signaling_NaN
,标准说明了这一点:
对于has_signaling_NaN!= false的所有特化都有意义。专业要求 其中is_iec559!= false。
因此,它可能是必需的但毫无意义......自然而然的事情就是提供一个安静的NaN。
我还没有找到QNAN
vs IND
的权威资源,但它们似乎都是安静的NaN。可能有数百万种不同的NaN,每个尾数值一个。如果我猜测,IND
可能类似于 ind eterminate值的错误代码,例如0/0。对于通用NAN
宏来说,这不是一个合适的选择,但是在用这种方式定义C数字绑定之后,它们可能会被卡住。