2020-11-01
단어 뜻에서도 알 수 있듯이 Infinity는 무한대라는 의미를 가지고 있고, NaN은 (Not a Number) 숫자가 아니라는 의미를 가지고 있다. 그러면 우선 어떠한 상황에서 이와 같은 결과가 나오게 되는지 알아보자.
public class TemplateA {
public static void main(String[] args) {
double n = 10;
System.out.println(n / 0.0);
System.out.println(n % 0.0);
}
}
실수 값을 0 으로 나눈 몫의 값은 무한히 나누어질 수 있어 Colsole 창에 값이 Infinity 가 출력된 것을 확인할 수 있으며, 0으로 나눈 나머지의 값은 존재하지 않을뿐더러 숫자가 아니기 때문에, NaN이 출력된 것을 확인할 수 있다.
물론 위의 식이 짧고 간단하여, 어떠한 경우에 Infinity 가 나오고 NaN이 나오는지 쉽게 파악할 수 있을 것이다.
다만 코드식이 길고 복잡하다면, 위의 두 값이 나오지 않도록 체크를 해줄 수 있는 코드가 필요하게 될 수 있다.
이러한 체크코드가 필요한 이유는 계산식 초기에 Infinity / NaN의 값이 나왔다면,
어떠한 산술연산을 수행해도 이 두 가지 값에서 변하지 않기 때문이다.
그러면 바로 코드를 살펴보자. 코드는 아래와 같다.
public class TemplateA {
public static void main(String[] args) {
double a = 10 / 0.0;
double b = 10 % 0.0;
double c = 10 / 2;
double d = 10 % 3;
check(a);
check(b);
check(c);
check(d);
}
public static void check(double x) {
if(Double.isInfinite(x) || Double.isNaN(x)) {
System.out.println("사용불가");
}else {
System.out.println("사용가능 : " + x);
}
}
}
위에 식처럼 특정 변숫값이 차후 코드에 사용해도 될 변수인지 체크하기 위한 함수 식을 만들어 보았다. Double.isInfinite(x) 메소드와 Double.isNaN(x) 메소드 두 가지를 사용하면, 쉽게 그 값이 산술식에 사용할 수 있는 없는지 판단할 수 있다.
이후 결과는 위와 같이 변수 a 와 b는 사용할 수 없는 값으로 출력되었으며, 변수 c와 d는 실수 값으로 출력되어, 사용할 수 있는 값으로 확인되었다.