例如,考虑一下
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
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始终为假的理由.