개념
NaN : Not a Number, 숫자가 아닌 값
Infinity : 무한대
System.out.println( 5 % 0.0);
System.out.println( 5 / 0.0);
NaN
Infinity
실제 연산 시 ArithmeticException이 발생함.
System.out.println( Integer.valueOf(5%0) );
System.out.println( Integer.valueOf(5/0) );
Exception in thread "main" java.lang.ArithmeticException: / by zero
특징
/, % 연산의 우측 연산자가 0일때 나타남.
이 값들에 추가 연산을 해도 NaN 또는 Infinity가 그대로 출력됨.
처리방법
해당 값이 NaN이나 Infinity인지 판별하는 로직을 추가한다.
Float.isFinite( val )
val이 NaN이나 Infinity가 아니면 TRUE, 해당되면 FALSE를 반환
입력값이 float 자료형의 최대값 범위 안이면 TRUE를 반환
public static final float MAX_VALUE = 0x1.fffffeP+127f; // 3.4028235e+38f
public static boolean isFinite(float f) {
return Math.abs(f) <= Float.MAX_VALUE;
}
Float.isInfinite( val )
val이 Infinity면 TRUE, 아니면 FALSE
입력값이 1을 0으로 나눈 양의 무한대값 과 -1을 0으로 나는 음의 무한대값 중 하나와 일치하면 TRUE를 반환
public static final float POSITIVE_INFINITY = 1.0f / 0.0f;
public static final float NEGATIVE_INFINITY = -1.0f / 0.0f;
public static boolean isInfinite(float v) {
return (v == POSITIVE_INFINITY) || (v == NEGATIVE_INFINITY);
}
Float.isNaN( val )
val이 NaN이면 TRUE, 아니면 FALSE
입력값을 자기자신과 비교해 다르면 TRUE를 반환하도록 해서 판별함.
public static boolean isNaN(float v) {
return (v != v);
}
Double.isFinite( val )
Float과 동일
Double.isInfinite( val )
Float과 동일
Double.isNaN( val )
Float과 동일
출처
- 이것이 자바다, 신용권, 한빛미디어
'JAVA > JAVA' 카테고리의 다른 글
Objects 클래스 (0) | 2021.09.28 |
---|---|
Object Class (0) | 2021.09.28 |
java.lang 패키지 (0) | 2021.09.27 |
어노테이션 Annotation (@) (0) | 2021.09.26 |
데이터 타입 Data Type (0) | 2021.09.24 |