为什么说NaN不等于NaN,难道就是因为语法规定吗
What is the rationale for all comparisons returning false for IEEE754 NaN values?里,IEEE委员会的一个成员给出了解释(在文中第二个黄色背景的段落),即NaN诞生初期所受到的计算机软、硬件的制约:
当初,还不存在isnan()
函数(文中采用的是更广泛的"predicate(谓词)")。那么,如果遇到变量为NaN
该怎么办?
文中说:"... computation would be best stopped rather than continued for an indefinite time to an Indefinite conclusion"。
我推断,当时那么简陋,估计也不存在什么错误处理机制;一切都靠条件判断进行流程控制。而为了在遇到NaN
时停止运行,只能让原本正常通过的条件判断"x == x"变得不通过。于是,计算机领域的一大奇闻就此诞生。
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
3 回答843 阅读✓ 已解决
3 回答1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
NaN
就是not a number
的意思,相当于一个描述性的变量,不存储内容。因此NaN != NaN