새소식

반응형
Language/Java

[Java] 자바 Infinity 와 NaN 의 정의 및 확인하는 방법

  • -
반응형

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는 실수 값으로 출력되어, 사용할 수 있는 값으로 확인되었다.

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.