NaNが引き起こす言語設計の暗黙の前提の破綻:PythonとLuaのケーススタディ

Two Case Studies of NaN

IEEE-754のNaNは奇妙な値であり、そのためプログラミング言語の設計にしばしば見落とされがちです。この記事では、NaNが言語仕様の暗黙の前提を破壊する2つの事例を紹介します。Pythonでは、リストの等価比較が同一性チェックを最適化として行うため、`[nan] == [nan]`が`True`になる一方で`nan == nan`は`False`になります。Luaの数値forループでは、NaNがステップやリミットとして使われると、ループが1回だけ実行されたり、NaNが負の値として扱われたりと、直感に反する挙動を示します。これらの事例は、NaNが言語実装の特定の比較演算子を漏れ出させることを示しています。

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

この日のほかの記事

2026-07-14