2016-06-10 147 views
2

我已经编写了一个程序,用于在计算后打印一个矩阵,并且我得到了所有元素的输出为nan。只要矩阵的第一个元素变成nan以便理解问题,我想打破for循环。我怎样才能做到这一点?在终端中,我打印了包含nan的矩阵a作为所有元素并键入a[1][1]=="nan"a[{{1},{1}}]=="nan",两者都返回false。他们为什么不返回false,我应该用什么声明呢?Lua检查数值/值是否为

+2

'本地函数isNaN(v)的返回类型(V)== “数量” 和v〜= V端' – siffiejoe

+1

'本地函数isNaN(v)return tostring(v)== tostring(0/0)end' –

+0

@EgorSkriptunoff - (0/0)会产生一个不同的字符串,即使它仍然是nan,因此返回false,即使true应该返回。 https://ideone.com/YoOljy – Rochet2

回答

6

您的测试失败,因为您正在比较数字与字符串"nan"

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

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

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

0

尝试这种情况:

for x = 1, x2 do   -- x2 depends on how big you matrix is. 
    for y = 1, y2 do  -- y2 the same as x2 
    -- some code depending on how your program works 
    if a[x][y] == nan then 
     print("X:" .. x .. ", Y:" .. y) 
     break 
    end 
    end 
end 

PS:(楠==楠)为真

+0

您的回答不正确。变量“nan”没有在Lua中定义,因此它将评估为(nil)。 (nil == nil)确实如此。但是,(0/0 == 0/0)是错误的! – joshuahhh