실수형
정의
- 실수란 부동소수점 표현방식의 수를 뜻한다. (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