- C/C++에서 float 형 변수와 double 형 변수의 차이

 

실제 C에서 float 형 변수와 double 형 변수는 실수값을 floating point 이진수 방식으로 저장합니다.

 

즉, float 형 변수와 double 형 변수 모두 실수 값을 저장하기 위해 부호, 지수 부분, 소수 부분을 저장합니다.

 

차이는 float 형 변수와 double 형 변수가 실수값을 저장하기 위해 사용하는 메모리 bit 사이즈에 있습니다.

 

즉, float 형 변수는 실수값을 저장하기 위해 32bit(부호 1bit, 지수 부분 8bit, 소수 부분 23bit)를 사용하고 double 형 변수는 실수값을 저장하기 위해 64bit(부호 1bit, 지수 부분 11bit 소수 부분 52bit)를 사용합니다.

 

이는 구체적으로 두가지 차이로 볼 수 있는데요.

 

먼저 float 형 변수와 double 형 변수의 지수 부분 bit 사이즈의 차이로 인해 저장할 수 있는 실수값의 범위가 달라집니다.

 

float 형 변수와 double 형 변수는 지수 부분을 저장하기 위해 각각 8bit, 11bit를 사용하는데요.

 

float 형 변수는 8bit로 지수부분 -127~128을 표현하는데 사용하고, double 형 변수는 11bit로 -1023~1024를 표현하는데 사용합니다.

 

따라서 float 형 변수는 저장할 수 있는 값의 범위가 대략 -(2^128) ~ +(2^128) 이고

double 형 변수는 저장할 수 있는 값의 범위가 대력 -(2^1024)~+(2^1024) 입니다.

 

다음으로 float 형 변수와 double 형 변수의 소수 부분 bit 사이즈의 차이로 인해 정확히 표현 할 수 있는 실수값의 자리수가 달라집니다.

 

float 형 변수의 경우 생략된 정수부분 1bit와 소수부분 23bit로 인해 bit precision이 24bit이고, double 형 변수의 경우 생략된 정수부분 1bit와 소수부분 52bit로 인해 bit precision이 53bit가 됩니다.

 

따라서 float 형 변수는 log(2^24)=7.x 공식에 따라 십진수 7자리 숫자를 정확히 표현할 수 있고 double 형 변수는 log(2^53)=15.x 공식에 따라 십진수 15자리 숫자를 정확히 표현할 수 있습니다.

 

위의 두가지 차이를 통해서 float 형 변수는 double 형 변수 보다 지수부분 bit 사이즈가 작아서 저장할 수 있는 값의 범위가 더 작고 bit precision이 더 낮아서 저장된 숫자의 정확도가 더 떨어 짐을 알 수 있습니다.

+ Recent posts