NaNが言語設計を壊す:PythonとLuaの意外な挙動

Two Case Studies of NaN

IEEE-754のNaNは奇妙な値であり、言語設計に暗黙の仮定をもたらすことがある。Pythonではリストの等価比較が同一性チェックを最適化するため、[nan] == [nan]がTrueになる一方、nan == nanはFalseになる。Luaの数値forループでは、NaNがステップやリミットに使われると、ループが1回だけ実行されたり、実行されなかったりする。これらの挙動は実装の比較演算子の選択に起因し、ドキュメント化されていない。NaNの扱いを明示的にチェックする必要性を指摘する。

NaNを使うと、実装が使う特定の比較演算子がインタプリタの動作に漏れ出してしまう。

この日のほかの記事

2026-07-14