有没有办法检测 NaN 和 -NaN?

我想将 Lua 数字保存为字符串并正确处理 NaN 情况。

检测任何 NaN 很容易,x ~= x

然而,我找到的仅能检测 NaN-NaN 的方法是使用 tostring(x) == 'nan'。有更好的方法吗?

点赞
用户1442917
用户1442917

翻译: 与其使用不可移植的 tostring(x) == 'nan',你可以使用实际的 tostring 调用进行比较:根据需求,可以使用 tostring(x) == tostring(0/0)tostring(x) == tostring(-(0/0))。如果需要进行多次比较,可以保存 tostring 的结果并重复使用。

2018-09-11 16:50:12
用户6834680
用户6834680

有超过两个 NaN 存在(实际上,根据 IEEE-754,有 2^52-1 个 NaN)。

它们的 tostring 表示形式取决于平台。

以下是如何获取三种不同的 NaN 的示例(我使用了使用 Visual Studio 构建的 Lua 5.3):

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 的不同变体更为准确。

2018-09-11 17:18:32