Notice
Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

3.5 나눗셈 연산후 NaN과 Infinity 처리 본문

이것이 자바다/03 연산자

3.5 나눗셈 연산후 NaN과 Infinity 처리

빌드이너프 2024. 3. 29. 10:38

나눗셈(/) 또는 나머지(%) 연산에서 좌측 피연산자가 정수이고 우측 피연산자가 0일 경우 예외(ArithmeticException)가 발생한다

무한대의 값을 정수로 표현할 수 없기 때문

int x = 5;
int y = 0;
int result = 5 / 0; //예외 발생

 

좌측 피연산자가 실수이거나 우측 피연산자가 0.0 또는 0.0f이면 예외가 발생하지 않고 연산의 결과는

Infinity(무한대) 또는 NaN(Not a Number)이 된다

5 / 0.0 -> Infinity
5 % 0.0 -> NaN

 

 

문제점은 Infinity 또는 NaN 상태에서 계속해서 연산을 하면 안된다

어떤 연산을 하더라도 결과는 계속해서 Infinity와 NaN이 되므로 데이터가 엉망이 될 수 있다

Infinity + 2 -> Infinity
NaN + 2 -> NaN

 

/와 %의 연산의 결과가 Infinity 또는 NaN인지 먼저 확인하고 다음 연산을 수행하는 것이 좋다

확인하기 위해 Double.isInfinite()Double.isNaN()를 사용

변수값이 Infinity 또는 NaN일 경우 true를, 아닌 경우 false를 산출한다

boolean result = Double.isInfinite(변수);
boolean result = Double.isNaN(변수);

 

 

예제

 

package ch03.sec05;

public class InfinityAndNaNCheckExample {
	public static void main(String[] args) {
		int x = 5;
		double y = 0.0;
		double z = x / y;
//		double z = x % y;
		
		//잘못된 코드
		System.out.println(z + 2);
		
		//알맞은 코드
		if(Double.isInfinite(z) || Double.isNaN(z)) {
			System.out.println("값 산출 불가");
		} else {
			System.out.println(z + 2);
		}
	}
}
Infinity
값 산출 불가