멋있게걷는방법

[Swift] 값이 NaN 으로 변한다구요? 본문

iOS

[Swift] 값이 NaN 으로 변한다구요?

도현D 2023. 1. 9. 15:22

프로젝트를 진행 중 처음 보는 NaN이라는 형태를 발견하고 공부해 보았습니다.

매개변수를 받아서 백분율로 변환하는 함수를 실행 중에 발생했습니다.

예를 들어

func sum(a: Double, b: Double) {
    let sum = a + b
    let firstP = a / sum * 100.0
    let secondP = b / sum * 100.0

    print(firstP)
    print(secondP)
}

위와 같은 함수가 있다고 했을 때, a = 0, b = 0을 매개변수로 전달하면 firstP와 secondP는 어떻게 될까요?
NaN 이 됩니다.

NaN

NaN 은 Not a Number의 약자로 '숫자가 아니다', '정상적인 값이 아니다' 등으로 해석될 수 있는데요.
수학적으로 정상적인 연산이 불가함에도 불구하고 억지로 연산이 이루어질 경우 발생한다고 합니다.

위의 예시를 풀어써보면,

firstP = 0 / 0.0 * 100.0
secondP = 0 / 0.0 * 100.0

이렇게 됩니다.

0을 0.0으로 나누면 즉 0/0 꼴은 존재할 수 없기 때문에 정상적인 값이 아니다라고 판단하고 NaN이라고 알려주는 것이죠.

그렇다면

1/0.0 꼴이라면 어떨까요?
inf라는 값이 나옵니다.
inf는 느낌 오다시피 infinity 즉 무한을 의미합니다.

그럼
1/0 꼴이라면 어떨까요?
'division by zero'라는 에러가 발생합니다.
0으로 나눌 수 없다는 뜻이죠!

그럼 1/0.0 꼴일 때 inf라는 값이 나오는 이유는 뭘까요?

y=1/x에서 x 가 0일 때 y는 무한값이다.  
이때 정수형은 무한값을 지원하지 않기 때문에 division by zero 에러를 발생시키고,  
실수형은 무한값을 지원하기 때문에 결과로 infinity를 나타내는 inf 가 나온다!

NaN 값에 대해서 궁금하여 공부하다가 inf 값은 우연히 발견하여 조금 공부해 보았습니다.
개발 중 NaN 값이 발생한다면. isNaN 속성을 이용하여 해결해보셨으면 좋겠습니다 ㅎㅎ
읽어주셔서 감사합니다.

참고

https://sujinnaljin.medium.com/swift-1-0-0%EC%9D%98-%EA%B2%B0%EA%B3%BC%EB%A1%9C-%EB%82%98%EC%98%A4%EB%8A%94-inf-%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C-8b3acd9bcdf1