[Programming]/Java

[자바의 신 부록] float와 double의 범위

JJ* 2015. 1. 3. 17:17
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는 타입에 따라 달라진다.

 매개 변수

 float 

float-extended-exponent 

double 

double-extended-exponent 

24 

24 

53 

53 

>=11 

11 

>=15 

E max 

+127 

>=+1023 

+1023 

>=+16383 

E min 

-126 

<=-1022 

-1022 

<=-16382 

 

 ** 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