c++ - NaN 有 2 种 : signaling_NaN, Quiet_NaN,还有... NAN 本身?

标签 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而不是其他,我什么时候应该避免它,为什么?

最佳答案

您的机器没有信号 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。

我还没有找到 QNANIND 的权威资源,但它们似乎都是安静的 NaN。可能有数百万个不同的 NaN,每个尾数值一个。如果我猜测,IND 可能类似于 ind‍确定值的错误代码,例如0/0。对于通用 NAN 宏来说,这并不是一个合适的选择,但在以这种方式定义 C 数字绑定(bind)后,他们可能会一直坚持使用它。

关于c++ - NaN 有 2 种 : signaling_NaN, Quiet_NaN,还有... NAN 本身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23861999/

相关文章:

floating-point - 为什么 IEEE 754 保留这么多 NaN 值?

c++ - 在 cpp 中为 double 和 string 数据类型定义运算符 +

c++ - 路亚 "attempt to index a nil value"

结构的c++ vector 和从文件中读取

c - 除以零 - C 编程

javascript - Number.IsNaN() 比 isNaN() 更坏吗

python - 如何使用 python 使用回归模型将预测值转换为 NaN 输入值

c++ - C++ 中的调度表

c++ - 在类的方法中初始化类的对象成员

ios - Objective-C 中的 `isNan`