Python 与 Lua 中的 NaN 陷阱
Two Case Studies of NaN
IEEE-754 标准下的 NaN 行为诡异,常导致编程语言设计出现意外漏洞。我发现了两个典型案例:在 Python 中,由于列表比较优化假设对象恒等于自身,导致 [nan] == [nan] 返回 True,而 nan == nan 却为 False,这违背了反射性原则。在 Lua 中,数值 for 循环遇到 NaN 时行为完全不可预测,有时执行一次,有时直接跳过,甚至将 NaN 视为负数步长。这些行为均未在文档中说明,显然是实现细节的疏漏。NaN 的怪异特性正在悄悄破坏语言的语义一致性,开发者需格外警惕。
"NaN 很奇怪,这意味着其他事物与它交互时也会变得很奇怪。"