【发布时间】:2016-08-20 00:05:09
【问题描述】:
我有以下程序:
#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 之间的比较,如上例所示。
标准对此有何评论?
【问题讨论】:
-
FPU 函数和比较的逻辑结果可能是两个不同的东西。你的反汇编说明了什么?
-
您的代码可能(或可能不会)缺少
==比较。您确实检查了<和>,但没有检查==。也许您打算使用<和>=或<=和>。