Lua 检测一个数字/值是否为“nan”

我编写了一个程序,在一些计算后打印矩阵,所有元素都显示为“nan”。我想在矩阵的第一个元素变为“nan”时立即停止 for 循环以了解问题所在。我该如何做到这一点?在终端中,我打印了包含“nan”作为所有元素的矩阵 a ,并键入 a[1][1]=="nan"a[{{1},{1}}]=="nan",它们都返回false。它们为什么不返回false,我应该使用什么语句?

原文链接 https://stackoverflow.com/questions/37753694

点赞
stackoverflow用户1009479
stackoverflow用户1009479

你的测试失败了,因为你正在比较一个数字和字符串"nan"

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

if a[1][1] ~= a[1][1] then

因为根据 IEEE 754,nan 值被认为与任何值都不相等,包括它自己。

2016-06-11 03:11:17
stackoverflow用户5675171
stackoverflow用户5675171

尝试这个:

对于 x = 1,x2 做      -- x2 取决于矩阵的大小。
  对于 y = 1,y2 做      -- y2 与 x2 相同
    -- 一些根据程序工作方式而定的代码
    如果 a[x][y] == nan then 
      打印( "X:" .. x .. ", Y:" .. y )
      中断
    结束
  结束
结束

PS: (nan == nan) 是 true

2016-06-14 00:35:16
stackoverflow用户2285255
stackoverflow用户2285255

两种解决方案:

local n = 0/0 -- nan

-- 第一种解决方案
if ( tostring(n) == "nan" ) then
   print("is nan!!")
end

-- 第二种解决方案
if (n ~= n) then
   print("is nan!!")
end
2018-03-21 04:22:11