실수형

정의

  • 실수란 부동소수점 표현방식의 수를 뜻한다. (IEEE754 기준)
  • 부동소수점 표현방식이란, 가수부와 지수부로 이루어진 수를 의미한다.
  • C 언어에서 기본 실수형은 double 이다.

실수형 자료형 정리

구분 자료형 설명 크기
실수형 float 단정밀도 부동 소수점 형
메모리 사용량이 중요하고, 정밀도가 덜 중요한 경우 사용
약 1.175494e-38 ~ 3.402823e+38
4
  double 배정밀도 부동 소수점
float 보다 더 정밀한 수를 표현할 때 사용
약 2.225074e-308 ~ 1.797693e+308
8
  long double 가장 큰 크기의 최고 정밀도
약 2.225074e-308, 1.797693e+308
8
  • 현재는 double 형과 long double 형의 크기가 같지만, 미래에 컴퓨터 성능이 좋아지면 달라질 것이다.

실수형의 unsigned

  • 실수형은 unsigned 형이 없다.
  • 기본적으로 실수형은 이미 ‘부호’를 담당하는 비트(sign bit)가 구조적으로 담겨있다.
실수형 구조 설명
부호 비트 1비트를 사용해 이 숫자가 양수(+)인지 음수(-)인지를 명확하게 구분한다.
지수부 수의 크기(자릿수)를 나타낸다.
가수부 수의 정밀도(실제 숫자)를 나타낸다.

실수형 알아보기

float

  • float 이라고 표현한다.
  • 단정(밀)도 실수형이라고 부른다.
  • 4바이트의 크기를 가진다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 표현 범위
float min_float = FLT_MIN;
float max_float = FLT_MAX;
printf("float 자료형의 범위(f : 부동소수 표기) : %f, %f\n", min_float, max_float);
printf("float 자료형의 범위(e : 지수 표기) : %e, %e\n", min_float, max_float); 
printf("float 자료형의 범위(g : 일반 표기) : %g, %g\n", min_float, max_float); 

>> float 자료형의 범위(f : 부동소수 표기) : 0.000000, 340282346638528859811704183484516925440.000000
>> float 자료형의 범위(e : 지수 표기) : 1.175494e-38, 3.402823e+38
>> float 자료형의 범위(g : 일반 표기) : 1.17549e-38, 3.40282e+38

// 크기
float f;
printf("float 의 size : %d\n", sizeof(f));

>> 4

double

  • double 이라고 표현한다.
  • C 언어에서 기본 실수형은 바로 이 double 형을 가리킨다.
  • 배정(밀)도 실수형이라고 부른다.
  • 8바이트의 크기를 가진다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 표현 범위
double min_double = DBL_MIN;
double max_double = DBL_MAX;
printf("double 자료형의 범위(f : 부동소수 표기) : %f, %f\n", min_double, max_double);
printf("double 자료형의 범위(e : 지수 표기) : %e, %e\n", min_double, max_double);
printf("double 자료형의 범위(g : 일반 표기) : %g, %g\n", min_double, max_double);

>> double 자료형의 범위(f : 부동소수 표기) : 0.000000, 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000
>> double 자료형의 범위(e : 지수 표기) : 2.225074e-308, 1.797693e+308
>> double 자료형의 범위(g : 일반 표기) : 2.22507e-308, 1.79769e+308

// 크기
double d;
printf("double 의 size : %d\n", sizeof(d));

>> double  size : 8

long double

  • long double 이라고 표현한다.
  • 8바이트의 크기를 가진다.
  • 미래에 컴퓨터의 성능이 더 좋아진다면, 더 큰 크기를 가지게 될 것이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 표현 범위
long double min_long_double = LDBL_MIN;
long double max_long_double = LDBL_MAX;
printf("long double 자료형의 범위(f : 부동소수 표기) : %Lf, %Lf\n", min_long_double, max_long_double); // 제대로 표현 불가
printf("long double 자료형의 범위(e : 지수 표기) : %Le, %Le\n", min_long_double, max_long_double);
printf("long double 자료형의 범위(g : 일반 표기) : %Lg, %Lg\n", min_long_double, max_long_double);

>> long double 자료형의 범위(f : 부동소수 표기) : 0.000000, 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000
>> long double 자료형의 범위(e : 지수 표기) : 2.225074e-308, 1.797693e+308
>> long double 자료형의 범위(g : 일반 표기) : 2.22507e-308, 1.79769e+308

// 크기
long double ld;
printf("long double 의 size : %d\n", sizeof(ld));

>> long double  size : 8

실수형의 표현 방법

표현 방법 설명
%f 부동소수형 표기법
%e, %E 지수형 표기법
%g, %G 일반 표기법. 부동소수형 또는 지수형으로 “알아서 잘” 깔끔하게 보여주는 방식
%lf double 의 부동소수형 표기법
%le, %lE double 의 지수형 표기법
%lg %lG double 의 일반 표기법
%Lf long double 의 부동소수형 표기법
%Le, %LE long double 의 지수형 표기법
%Lg, %LG long double 의 일반 표기법
  • double 과 long double 의 경우 %l%L 로 구분된다.
  • printf 함수에서는 두 가지를 혼용해도 괜찮지만, scanf 함수에서는 이 규칙을 지켜야 한다.

Reference

C 프로그래밍 (김형근, 곽덕훈, 정재화 공저)
C 프로그래밍 강의 (방송통신대 - 이병래)

Comments