双和NaN的比较结果是什么?

Ale*_*lex 6 c++ nan c++11

我有以下程序:

#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上例中的比较.

标准说什么呢?

eer*_*ika 7

标准说什么呢?

C++标准没有说明对NaN的操作如何表现.它没有具体说明.因此,就C++而言,任何结果都是可能的并且是允许的.

ANSI/IEEE标准754-1985说:

5.7.对照

......每个NaN都会将无序与包括其自身在内的所有东西进行比较....

什么无序装置恰好被示出在表4中相同的部分.但简而言之,这意味着如果任何操作数是NaN,则比较应返回false,除非!=返回true.