Mingyu Kim

나눗셈 연산 후 NaN과 Infinity 처리

실수 타입(double, float)으로 연산할 때, 0으로 나누거나 나머지를 구하면 에러가 발생하는 대신 특별한 상수값을 반환한다.

1. Infinity (무한대)

나누는 수(제수)가 0.0일 때 발생

2. NaN (Not a Number)

연산 결과를 숫자로 정의할 수 없을 때 발생

3. 왜 이게 위험할까?

한 번 InfinityNaN이 발생하면, 그 이후의 모든 연산 결과가 망가지기 때문

double x = 5 / 0.0; // Infinity
double y = x + 100; // Infinity
double z = x * 0;   // NaN (무한대에 0을 곱하면 숫자가 아님)

더 큰 문제는 비교 연산자를 쓸 때다. 특히 NaN은 어떤 숫자와 비교해도, 심지어 자기 자신과 비교해도 false를 반환한다.

double myNan = Double.NaN;
System.out.println(myNan == Double.NaN); // 결과: false (주의!)

4. 안전하게 확인하는 방법

연산 결과가 InfinityNaN인지 확인하려면 반드시 전용 메소드를 사용하자.

상황 확인 메소드 사용 예시
무한대인가? Double.isInfinite(value) if(Double.isInfinite(z)) { ... }
숫자가 아닌가? Double.isNaN(value) if(Double.isNaN(z)) { ... }

5. 실무 적용 코드 패턴

double input = 0.0; // 사용자 입력값
double result = 5 / input;

if (Double.isInfinite(result) || Double.isNaN(result)) {
  System.out.println("값 산출 불가");
} else {
  System.out.println("결과: " + (result + 10));
}

6. 요약 및 체크포인트