我认为这在某种程度上简化了数值计算,但我找不到一个明确的理由,甚至在Kahan的IEEE 754现状讲座讲稿中也没有详细讨论其他设计决策。
在进行简单的数据处理时,这种异常行为会造成麻烦。例如,当在C程序中对记录列表w.r.t.某个实值字段进行排序时,我需要编写额外的代码来处理NaN作为最大元素,否则排序算法可能会变得混乱。
<强>编辑: 到目前为止,所有的答案都认为比较nan是没有意义的
我同意,但这并不意味着正确答案是错误的, 相反,它将是一个Not-a-Boolean (NaB),幸运的是它不存在 所以在我看来,选择返回true或false进行比较是任意的, 对于一般的数据处理来说,如果它符合通常的规律,那将是有利的 (==的反身性,<, ==, >), 以免依赖于这些定律的数据结构变得混乱
所以我要求的是打破这些定律的一些具体好处,而不仅仅是哲学推理。
<强>编辑2: 我想我现在明白了为什么让NaN最大是一个坏主意,它会搞砸上限的计算
NaN != NaN可能是可取的,以避免检测循环中的收敛,例如
while (x != oldX) {
oldX = x;
x = better_approximation(x);
}
,但最好是通过比较小的极限的绝对差来写。 所以恕我直言,这是在NaN处打破自反性的一个相对较弱的论据