NaN rompe la lógica de Python y Lua: dos casos reales
Two Case Studies of NaN
NaN (Not a Number) es notoriamente extraño en IEEE-754, y a menudo se pasa por alto en el diseño de lenguajes de programación. Este artículo explora dos casos donde esa omisión causa comportamientos inesperados. En Python, la comparación de listas usa la identidad como optimización, asumiendo que un objeto es igual a sí mismo, pero NaN viola esa suposición, haciendo que `[nan] == [nan]` sea `True` mientras que `nan == nan` es `False`. En Lua, los bucles `for` numéricos dependen de comparaciones específicas que fallan con NaN, resultando en iteraciones que se ejecutan una vez o nunca, dependiendo de la posición del NaN. El autor sugiere que los lenguajes deberían verificar y rechazar NaN explícitamente.
Usar NaN provoca que el operador de comparación específico utilizado por la implementación se filtre en el comportamiento del intérprete.