2016-06-10 3 views
2

일부 계산 후에 행렬을 인쇄하는 프로그램을 작성했으며 모든 요소에 대해 nan의 결과를 얻고 있습니다. 행렬의 첫 번째 요소가 nan이 되 자마자 루프를 for 루프로 나누고 싶습니다. 어떻게해야합니까? 터미널에서 nan을 포함하는 행렬 a을 모든 요소로 인쇄했으며 a[1][1]=="nan"a[{{1},{1}}]=="nan" 모두가 false을 반환합니다. 왜 그들은 false을 반환하지 않으며 대신 어떤 진술을 사용해야합니까?숫자/값이 N0n인지 확인하십시오.

+2

'로컬 함수 때는 isNaN (V) 반환형 (V) == "번호"및 V ~ = V 단부 사실 ' – siffiejoe

+1

' 로컬 함수 isNaN (v) return tostring (v) == tostring (0/0) end' –

+0

@EgorSkriptunoff - 여전히 나노인데도 다른 문자열을 반환하므로 참이더라도 false를 반환합니다. 반환해야합니다. 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"은 루아에서 정의되지 않으므로 (nil)으로 평가됩니다. (nil == nil) 실제로 참입니다. 그러나 (0/0 == 0/0) false입니다! – joshuahhh

관련 문제