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

Bau*_*gen 11 c++

例如,考虑一下

bool fun (double a, double b) {
    return a < b;
}
Run Code Online (Sandbox Code Playgroud)

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

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

Igo*_*nik 12

C++标准只是说:

[expr.rel]/5如果两个操作数(转换后)都是算术类型或枚举类型,则每个运算符应true在指定关系为true且false为false时生成.

所以基本上,a < b如果a小于,则为真b.

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

  • 很难想象a)支持`NaN`值的实现,但是b)没有符合IEEE 754的行为.在任何理智的实现中,`a <b`是明确定义的,其值为`false`如果其中一个或两个操作数都是"NaN".然而,该标准在这个主题上相当模糊 - 我相信,故意这样做是为了迎合非符合IEEE 754标准的系统. (3认同)

Sun*_*est 12

与NaN的任何比较(除了"!=")都返回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
Run Code Online (Sandbox Code Playgroud)

点击此处查看为什么NaN始终为假的理由.