[Swift] 1/0.0의 결과로 나오는 inf 는 무엇일까?

0.0 으로 나누면 Division by zero 에러가 안난다구요?

naljin

--

개-하! 플레이그라운드에서 1/0 을 실행하면 무슨 값이 나올까요?

값은 무슨 ㅋ 현실은 컴파일도 안됨요 ㅎ 이유는 0 으로 나눌 수 없다는 것!

그렇다면 분모를 Double 로 변경해볼게여

컴파일은 되는데, inf 라는 값이 나왔습니다

🤔 응???? 컴파일 왜 되냐?? 그리고 inf 는 뭔디!

infInfinity, 즉 무한값을 뜻합니다. swift 에서는 isInfinite 라는 프로퍼티로 무한값 여부를 체크할 수 있습니다

🤔 그럼 왜 Double 로 나눌때는 에러가 아니라 inf 라는 값이 나온건데??

우선 고등학교 수학시간으로 돌아가봅시다.

위 그래프는 y=1/x 를 표현하는데, x 가 0으로 수렴할수록 y 는 무한으로 발산합니다. 양의 무한대인지, 음의 무한대인지의 차이는 있지만요!

이때 정수형은 infinity 를 지원하지 않기 때문에 division by zero 에러를 뿜습니다. max 값은 그래봤자 64 bit 기준으로 9223372036854775807 유한값이잖아여?

하지만 실수형은 IEEE 754 부동소수점 표준에 의해 +infinity 혹은 -infinity 라는 특별한 값을 지원합니다.

IEEE 754는 IEEE( Institute of Electrical and Electronics Engineers )가 1985년에 제정한 부동소수점 연산을 위한 기술 표준으로, 많은 하드웨어의 부동 소수점 단위는 IEEE 754 표준을 사용합니다.

따라서 아래와 같은 계산의 결과로 각각 inf-inf 를 확인할 수 있습니다

Float 의 Type property 로 infinity 가 있는 걸 문서에서도 찾을 수 있네여

참고로 Float 은 위에서 살펴봤듯 무한값도 지원을 하기 때문에, Int.max 같이 유한값에서 가장 큰 값을 얻기 위해서는 greatestFiniteMagnitude 프로퍼티를 사용하면 됩니다.

--

--