Существует более двух NaN (на самом деле, согласно IEEE-754 2^52-1
NaN).
Их tostring
-единственные представления зависят от платформы.
Вот пример того, как получить три разных NaN (я использую Lua 5.3, собранную с Visual Studio):
n = string.unpack(">d", string.pack(">d", 0/0):sub(1, -2).."@")
print(0/0, -(0/0), n) --> -1.#IND 1.#QNAN -1.#QNAN
Итак, было бы правильнее не различать разные варианты NaN.