float vs double의 차이는?

김터넷 ㅣ 2023. 4. 9. 16:45

728x90
반응형

일반적으로 데이터는 숫자 데이터, 숫자가 아닌 데이터(문자,문자열 포함) 두가지 유형이 있다.

float 과 double은 숫자 데이터에 속하는데 숫자 데이터는 '정수'와 '부동 소수점 숫자'로 구성된다.

float 과 double은 모두 '실수'를 표현하기 위해 사용되는 자료형이다.

즉, 부동 소수점 숫자를 표현하는 데이터 유형이다.

 


학습목표

  • float과 double의  차이
  1. 크기(Size)
  2. 정밀도(Precision)
  3. 저장방식

 

float과 double의 차이

 

크기(Size)

 

두 데이터 유형 모두 10진수로 숫자 표현하지만

float 32비트, double 64비트이다.(1비트 = 8바이트)

 

구분 데이터형 바이트 수 데이터 범위
정수

byte 1Byte -2⁷ ~ 2⁷-1 (-128~127)
short 2Byte -2¹⁵ ~ 2¹⁵-1(-32768 ~ 32767)
int 4Byte -2³¹ ~ 2³¹ -1
long 8Byte -2⁶³ ~ 2⁶³ -1
실수 float 4Byte -3.4 * 10³⁸ ~ 3.4 * 10³⁸
  double 8Byte -1.7 * 10³⁰⁸ ~1.7 * 10³⁰⁸ 
문자 char 2Byte Unicode 문자
논리 boolean - true or false

 

정밀도(precision)

 

실수형 데이터 타입을 다룰 때 중요한 것은 '정밀도(precision)'이다.

하지만 정수형보다 실수형을 쓰면 훨씬 더 큰 값을 표현할 수 있지만, 오차가 발생할 수 있다

 

자료형 크기 범위 유효자릿수 비고
float 4바이트,
32비트
1.175494e-38  ~
3.4028 23e+38
7 IEEE 754 단정밀도 부동소수점
double 8바이트,
64비트
2.225074e-308 ~
1.797693e+308
16 IEEE 754 배정밀도 부동소수점
long
double
8바이트,
64비트
2.225074e - 308 ~
1.797693e + 308
16 IEEE 754 배정밀도 부동소수

 

유효자릿수가 뜻하는 것은 정밀도를 뜻하는데 오차없이 몇자리까지 표현 가능한지를 의미한다.

float은 7자리, double은 dobule이라는 용어대로 두 배의 비트 수를 할당하므로 15~16자리까지 표현 가능하다.

float보다 double의 정밀도가 더 높기 때문에 표현하려는 값의 크기에 따라 선택해서 사용하면 된다.

 

저장방식

 

정수형과 실수형은 저장방식이 다르다.

int형은 32비트 중 1비트 = 부호비트, 31비트는 값을 표현하는데 사용한다.

하지만 float 과 double은 부호, 지수, 가수로 나눠서 표현한다.

  • 부호(Sign bit) : 0이면 양수, 1이면 음수
  • 지수(Exponent): 부호있는 정수
  • 가수(Mantissa): 실제 값을 저장하는 부분

 

 부호(S) 1비트 지수(E) 필드 8비트 가수(M) 필드 23비트

▲단일-정밀도 형식(single-precision format) -> 32비트로 표현된 부동소수점 수(float)

 부호(S) 1비트 지수(E)필드 11비트 가수(M) 필드 52비트

▲복수-정밀도 형식(double-precision format) -> 64비트로 표현된 부동소수점 수(double)

 

※참고

실수 중에 파이와 같이 무한소수가 존재한다.

정수와 달리 실수를 저장할 때는 오차가 발생할 수 있다.

10진수가 아닌 2진수로 저장하기 때문에 10진수로는 유한소수이더라도

2진수로 변환하면 무한소수가 되기 때문이다.

따라서 무한소수를 모두 저장할 수 없기 때문에 짤리거나 오차가 생기기도 한다.

소수점 단위의 정확한 연산이 필요한 서비스에는 float, double 대신 'BigDecimal'을 사용해야 한다.

 

반응형