我有以下程序:
#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;
}
Run Code Online (Sandbox Code Playgroud)
输出:
0
0
Run Code Online (Sandbox Code Playgroud)
一般来说,从含义来看nan- not a number很明显,任何操作nan都是毫无意义的.从IEEE-754我在互联网上发现,我发现如果在FPU中至少有一个操作数也是nan结果nan,但我没有发现正常值与nan上例中的比较.
标准说什么呢?
标准说什么呢?
C++标准没有说明对NaN的操作如何表现.它没有具体说明.因此,就C++而言,任何结果都是可能的并且是允许的.
ANSI/IEEE标准754-1985说:
5.7.对照
......每个NaN都会将无序与包括其自身在内的所有东西进行比较....
什么无序装置恰好被示出在表4中相同的部分.但简而言之,这意味着如果任何操作数是NaN,则比较应返回false,除非!=返回true.