将数字与NaN进行比较的结果是什么?

时间:2015-07-04 21:32:32

标签: c++

考虑例如

bool fun (double a, double b) {
    return a < b;
}

如果任何参数是NaN,fun会返回什么?这是未定义/实现定义的行为吗?

其他关系运算符和相等运算符会发生什么?

3 个答案:

答案 0 :(得分:10)

C ++标准只是说:

  

[expr.rel] / 5 如果两个操作数(转换后)都是算术类型或枚举类型,则如果指定的关系为真,则每个运算符都应生成Imagem->setColorCount(4); // How many colors will be used for this image Imagem->setColor(0, qRgb(255, 0, 0)); // Set index #0 to red Imagem->setColor(1, qRgb(0, 0, 255)); // Set index #1 to blue Imagem->setColor(2, qRgb(0, 0, 0)); // Set index #2 to black Imagem->setColor(3, qRgb(255, 255, 0)); // Set index #3 to yellow Imagem->fill(1); // Fill the image with color at index #1 (blue) { {1}}如果是假的话。

基本上,如果true小于false,则a < b为真。

但是,该实现可以通过a声明符合IEC 559又称IEEE 754标准的浮点运算。然后它由5.7节和表4中的标准管理,该标准要求所有比较,但b涉及numeric_limits::is_iec559报告!=。涉及NaN报告的false !=

答案 1 :(得分:8)

与NaN的任何比较(&#34;!=&#34;除外)都返回false。

这是我构建的表格:

     +Dbl_Nan  0_Nan  Inf_Nan  NaN_NaN  +Dbl_Inf  +Dbl_-Inf  Inf_-Inf  Inf_Inf
   -----------------------------------------------------------------------
>  |  False    False  False    False     False     True      True      False
<  |  False    False  False    False     True      False     False     False
== |  False    False  False    False     False     False     False     True
!= |  True     True   True     True      True      True      True      False

点击here了解NaN始终为假的理由。

答案 2 :(得分:1)

假。

实际上没有-NaN这样的东西,尽管NaN值确实带有符号位以及有效负载。但出于算术目的,NaN是NaN是NaN。

与NaN的任何相等或有序比较都是错误的。