2016-06-10 145 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