有两种NaN:signaling_NaN,quiet_NaN和...... NAN本身?

时间:2014-05-26 02:41:21

标签: c++ nan

我一直认为有两种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 ...这两者都不是。

  1. 那么,NAN常数是什么样的NaN?是信号还是不信号?

  2. 我应该何时使用NAN代替其他人,何时应该避免使用{?

1 个答案:

答案 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数字绑定之后,它们可能会被卡住。