[자바의 신 부록] float와 double의 범위
▷ 자바에서 사용하는 소수점인 float와 double은 모두 IEEE 754라는 표준을 따른다.
- float : 32bit 단일 정확도(single-precision) 숫자. - double : 64bit 이중 정확도(double-precision) 숫자. |
→ IEEE 754에서 정의한 소수점 숫자의 표준에는 비트 크기 외에도 아래 표준들이 존재한다.
- 양수와 음수 - +0과 -0 - 양수와 음수의 무한대(infinity) - 숫자가 아닌 값 (Not a Number, NaN이라고도 함.)
** NaN의 값은 0/0과 같이 0을 0으로 나누었을 때 값이 포함되고, Float와 Double에 각각 Float.NaN, Double.NaN으로 선언돼 있다. |
▷정상적인 float와 double의 값 표현
s * m * 2 (e-N+1) | |||||||||||||||||||||||||
** 각 변수의 의미 및 범위 s : +1 혹은 -1 m : 1 < m < 2N 인 정수 e : -(2K-1-2) <= e <= 2K-1-1
** N과 K는 타입에 따라 달라진다.
** extended-exponent라고 정의되어 있는 타입들은 보다 큰 숫자를 표현할 수는 있으나 정확도는 떨어진다. ** +0과 -0을 비교할 경우 항상 결과는 true이다. 즉, 0 == -0의 결과는 true이다. - 하지만 다른 연산은 음수와 양수를 구분한다. - 1.0/0.0은 양의 무한대(positive infinity)가 되고, 1.0/-0.0은 음의 무한대(negative infinity)가 된다. ** 단, NaN의 경우 순서가 정해져 있지 않으므로, <, <=, >, >= 연산을 수행할 경우 항상 그 결과는 false가 된다. |
▶float와 double의 최대 최소값
타입 |
최소(Normal 값) (positive한 일반값) |
최소 (0이 아닌 positive한 값) |
최대 |
float |
|
|
|
double |
|
|
|