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

What is the result of comparing a number with NaN?

本文关键字:结果 结果是 是什么 比较 数字 NaN      更新时间:2023-10-16

以为例

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

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

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

任何与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

点击此处了解为什么NaN总是错误的基本原理。

C++标准只说:

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

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

然而,该实现方式可以通过numeric_limits::is_iec559声明符合浮点运算的IEC 559(即IEEE 754标准(。然后,它受第5.7节和表4中的标准管辖,该标准要求除涉及NaN!=之外的所有比较都报告false。涉及NaN!=报告true

错误。

实际上没有-NaN这样的东西,尽管NaN值确实携带了一个符号位和一个有效载荷。但出于算术目的,NaN就是NaN。

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

相关文章: