Lua 有没有办法检测NaN和-NaN?
我想将lua数字保存为string并正确处理Lua 有没有办法检测NaN和-NaN?,lua,numbers,nan,Lua,Numbers,Nan,我想将lua数字保存为string并正确处理NaN大小写 检测任何NaN都很容易,x~=x 然而,我发现的唯一一种检测方法是NaN或-NaN是使用tostring(x)='NaN'。有更好的方法吗?与不可移植的tostring(x)='nan'相比,您可以根据需要与实际的tostring调用进行比较:tostring(x)==tostring(0/0)或tostring(x)==tostring(-(0/0))。如果需要进行多次比较,可以将tostring的结果保存并重新使用。存在两个以上的NA
NaN
大小写
检测任何NaN都很容易,x~=x
然而,我发现的唯一一种检测方法是
NaN
或-NaN
是使用tostring(x)='NaN'
。有更好的方法吗?与不可移植的tostring(x)='nan'
相比,您可以根据需要与实际的tostring
调用进行比较:tostring(x)==tostring(0/0)
或tostring(x)==tostring(-(0/0))
。如果需要进行多次比较,可以将tostring
的结果保存并重新使用。存在两个以上的NAN(实际上,根据IEEE-754,存在2^52-1
NAN)。它们的
tostring
-ed表示依赖于平台。这是一个如何获得三个不同NAN的示例(我使用的是使用Visual Studio构建的Lua 5.3):
因此,不区分NaN的不同变体更为正确。如何得到-NaN?@lhf
0/0
是-NaN
,-(0/0)
是NaN
(如tostring
所述)。string.pack(“>d”,你的“NaN”):byte()>127
@EgorSkriptunoff没有函数string.pack
@val-此函数来自Lua 5.3。要获得相关答案,请使用与您的Lua版本相对应的标签标记您的问题。
n = string.unpack(">d", string.pack(">d", 0/0):sub(1, -2).."@")
print(0/0, -(0/0), n) --> -1.#IND 1.#QNAN -1.#QNAN