개발/Java
[Java] Division by Zero in Java: Exception, Infinity, or Not a Number
moonong
2022. 1. 7. 15:05
반응형
Division by Zero in Java: Exception, Infinity, or Not a Number
- 제수의 자료형이 Integer 일 때, divide by zero - ArithmeticException 을 발생시킨다.
// throws ArithmeticException
assertThrows(ArithmeticException.class, () -> {
int result = 12 / 0;
});
- 제수의 자료형이 float/dobule 일 때, exception 을 발생시키지 않으며 infinity/NaN 으로 리턴한다.
// exceptions 을 던지지 않으며, return NaN, POSITIVE_INFINITY, and NEGATIVE_INFINITY.
assertDoesNotThrow(() -> {
float result = 12f / 0;
});
assertEquals(Double.NaN, 0d / 0);
assertEquals(Float.POSITIVE_INFINITY, 12f / 0);
assertEquals(Double.NEGATIVE_INFINITY, -12d / 0);
계산식 초기에 infinity/NaN 값이 나왔다면, 어떠한 산술 연산을 수행해도 그 값이 변하지 않는다.
때문에 이를 방지하기 위해
- 0.0d, 0.0f 의 값을 정수 0 으로 치환하거나,
- infinity/NaN 을 체크하는 방어코드를 짜는 것이 좋다.
if(Double.isInifinite(number) || Double.isNaN(number)) {
// 후처리
}
반응형