为什么比较NaN值的行为与所有其他值不同? 也就是说,所有与运算符==,<=,> =,<,>的比较,其中一个或两个值是NaN的返回值都是false,与所有其他值的行为相反。 我认为这在某种程度上简化了数值计算,但是我找不到一个明确的原因,即使在Kahan的关于IEEE 754地位的讲稿中也没有详细讨论其他的devise决定。 这种不正常的行为在做简单的数据处理时会造成麻烦。 例如,当对C程序中的某些实值字段进行sorting时,我需要编写额外的代码来处理NaN作为最大元素,否则sortingalgorithm可能会变得混乱。 编辑:到目前为止的答案都认为比较NaN是没有意义的。 我同意,但这并不意味着正确的答案是错误的,而是一个非布尔(NaB),幸运的是它不存在。 所以在我看来,对于比较的select是真实的还是错误的,对于一般的数据处理来说,如果服从通常的规律(==的reflection性,<,==,>的三分法),将是有利的,以免数据结构依靠这些法律变得混乱。 所以我要求打破这些规律的一些具体优势,而不仅仅是哲学推理。 编辑2:我想现在我明白了为什么制作NaN最大是一个坏主意,它会搞乱上限的计算。 NaN!= NaN可能需要避免检测循环中的收敛,如 while (x != oldX) { oldX = x; x = better_approximation(x); } 然而,最好通过比较绝对差异和小的限制来写出。 所以恕我直言,这是一个相对较弱的NaN打破反身性的论据。
表示数字7的8位看起来像这样: 00000111 三位被设置。 什么algorithm来确定一个32位整数的设置位数?