考虑例如
bool fun (double a, double b) {
return a < b;
}
如果任何参数是NaN,fun
会返回什么?这是未定义/实现定义的行为吗?
其他关系运算符和相等运算符会发生什么?
答案 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的任何相等或有序比较都是错误的。