Lua检查数字/值是否为nan

Sib*_*ibi 2 lua nan

我编写了一个程序,在一些计算后打印一个矩阵,我得到了nan所有元素的输出.我想for在矩阵的第一个元素变为nan理解问题时立即打破循环.我怎样才能做到这一点?在终端中,我打印了a包含nan所有元素并输入的矩阵a[1][1]=="nan",a[{{1},{1}}]=="nan"两者都返回false.他们为什么不回来false,我应该使用什么声明呢?

Yu *_*Hao 8

您的测试失败是因为您正在将数字与字符串进行比较"nan".

如果您确定它是一个数字,最简单的方法是:

if a[1][1] ~= a[1][1] then
Run Code Online (Sandbox Code Playgroud)

因为根据IEEE 754,一个nan值被认为不等于任何值,包括它自己.


rsc*_*rsc 8

两种解决方案:

local n = 0/0 -- nan

-- first solution
if ( tostring(n) == "nan" ) then
   print("is nan!!")
end

-- second solution
if (n ~= n) then
   print("is nan!!")
end
Run Code Online (Sandbox Code Playgroud)

  • 根据 [Is there a way to detector NaN and -NaN?](/sf/answers/3659649591/) 上的这个问题,“nan”是“*不可移植*”,大概是因为那是Linux 上的 `tostring` 输出,而 [windows 使用 `#IND`](/sf/ask/1337511171/)。因此,更安全的等式是重复我们已知为 NaN(即“0/0”)的“tostring”,如下所示:“tostring(n) == tostring(0/0)” (4认同)