충분히 쌓여가는
3.5 나눗셈 연산후 NaN과 Infinity 처리 본문
나눗셈(/) 또는 나머지(%) 연산에서 좌측 피연산자가 정수이고 우측 피연산자가 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
값 산출 불가
'이것이 자바다 > 03 연산자' 카테고리의 다른 글
3.7 논리 연산자 (0) | 2024.03.29 |
---|---|
3.6 비교 연산자 - float 타입의 예외 (0) | 2024.03.29 |
3.4 정확한 계산은 정수 연산으로 (0) | 2024.03.29 |
3.3 오버플로우와 언더플로우 (0) | 2024.03.29 |
3.2 산술 연산자 - 산술 연산의 특징 (0) | 2024.03.29 |