我有以下程序:
#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/