c++ - double 和 NaN 的比较结果是什么?

标签 c++ c++11 nan

我有以下程序:

#include <iostream>
#include <cmath>

int main() {
    double a = 1;
    double b = nan("");

    std::cout << (a > b) << std::endl;
    std::cout << (b > a) << std::endl;

    return 0;
}

输出:

0
0

一般来说,从 nan 的含义 - not a number 可以明显看出,任何对 nan 的操作本质上都是毫无意义的。从我在互联网上找到的 IEEE-754 我发现如果在 FPU 中至少有一个操作数是 nan 结果也是 nan ,但是如上例所示,我没有发现正常值与 nan 之间的比较。

标准是怎么说的?

最佳答案

What does standard say about it?

C++ 标准没有说明对 NaN 的操作如何运作。它未指定。因此,就 C++ 而言,任何结果都是可能的和允许的。

ANSI/IEEE 标准 754–1985 说:

5.7. Comparison

... Every NaN shall compare unordered with everything, including itself. ...

无序 的确切含义如同一部分的表 4 所示。但简而言之,这意味着如果任何操作数为 NaN,则比较应返回 false,!= 除外应返回 true。

关于c++ - double 和 NaN 的比较结果是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36860216/

相关文章:

c++ - 计算线间隔中的点数

c++ - 包含的函数隐藏了重载的虚函数

c++ - 可变参数模板

JavaScript if 语句内部函数以避免除以零 NaN 结果?

c - 为什么我的程序输出 "nan"而不是 double (速度和位置?)

python - Pandas:如何删除以 nan 作为列名的多列?

c++ - QInputDialog & Threading( worker ,显示对话框,等待输入,继续)

c++ - 是否有可能让 NCurses CDK 矩阵动态调整到终端窗口?

c++ - 当 operator<<() 失败时回退到 to_string()

c++ - 使用 constexpr 进行基本编译时格式字符串检查