2016-06-10 2 views
2

Я написал программу для печати матрицы после некоторых вычислений, и я получаю вывод nan для всех элементов. Я хочу разбить цикл for, как только первый элемент матрицы станет nan, чтобы понять проблему. Как я могу это сделать? В терминале я напечатал матрицу a, содержащую nan, как все элементы и напечатал a[1][1]=="nan" и a[{{1},{1}}]=="nan", оба из которых возвращают false. Почему они не возвращают false и какое заявление следует использовать вместо этого?Lua проверить, есть ли число/значение nan

+2

'локальная функция IsNaN (v) тип возвращаемого значения (v) == "число" и v ~ = v конец ' – siffiejoe

+1

' local function 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

Смежные вопросы