Dev/C

[C언어] 실수 자료형 정리 (64bit Windows 기준)

몽-구 2020. 6. 16. 20:44
반응형

실수 자료형

C언어에서 사용하는 실수 자료형은 다음과 같다.

 

자료형 크기 범위 유효
자릿수
양수 최솟값 양수 최댓값  형식 지정자
(실수 표기법)
형식 지정자
(지수 표기법)
float 4byte (32bit) 1.175494e-38 ~
3.402823e+38
7 FLT_MIN FLT_MAX %f %e
double 8byte (64bit) 2.225074e-308 ~
1.797693e+308
16 DBL_MIN DBL_MAX %f %e
long double 8byte (64bit) 2.225074e-308 ~
1.797693e+308
16 LDBL_MIN LDBL_MAX %Lf %Le

* 최솟값 및 최댓값은 float.h 헤더 파일에 정의되어 있으므로 해당 심볼을 사용하고자 한다면 해당 헤더 파일을 include해야 한다.

정수 자료형과 비슷한 맥락으로 long double 자료형은 운영체제와 플랫폼마다 크기가 다르다. 여기를 확인하자.

 

유효 자릿수?

 

유효자릿수는 실수를 일정 자릿수만큼만 표현할 수 있다는 의미이다. 유효자릿수가 7인 float형을 예시로 들면 다음과 같다.

#include <stdio.h>

int main()
{
	float f1 = 0.1f;
	float f2 = 12.34f;
	float f3 = 123.4567f;
	float f4 = 12345.678f;
	float f5 = 1234.56789012345f;

	printf("float형 0.1 은\t\t\t%f\t로 출력\n", f1);
	printf("float형 12.34 는\t\t%f\t로 출력\n", f2);
	printf("float형 123.4567 은\t\t%f\t로 출력\n", f3);
	printf("float형 12345.678 은\t\t%f\t로 출력\n", f4);
	printf("float형 1234.56789012345 는\t%f\t로 출력\n", f5);

	return 0;
}

/*********************** [결과] ***********************
float형 0.1 은                  0.100000 	로 출력
float형 12.34 는                12.340000 	로 출력
float형 123.4567 은             123.456703 	로 출력
float형 12345.678 은            12345.677734 	로 출력
float형 1234.56789012345 는     1234.567871 	로 출력
******************************************************/

printf 함수로 float형을 소수점 조정없이 %f만으로 출력을 하면 기본적으로 소수점 아래 6자리까지 출력한다.

 

f1는 정수 부분 1자리 + 소수 부분 1자리 = 2자리 < 유효 자릿수 7자리이므로, 출력되는 수가 선언한 수와 동일하게 정상 출력된다.

 

f2 또한 정수 부분 2자리 + 소수 부분 2자리 = 4자리 < 유효 자릿수 7자리이므로, 출력되는 수가 선언한 수와 동일하게 정상 출력된다.

 

하지만 f3은 애초에 선언한 수가 정수 부분 3자리 + 소수 부분 4자리 = 7자리 = 유효 자릿수 7자리이므로, 소수점 조정없이 %f만으로 출력을 하게 된다면 123.456700이 아닌 123.456703이라는 부정확한 값이 출력된다. f4와 f5도 마찬가지로 선언한 수와는 다른 부정확한 값이 출력되는 것을 확인할 수 있다.

 

여기서 주목해야 할 점은, 앞 7자리까지는 선언한 것과 일치하는 정확한 값이 출력된다는 것이다. 이것이 유효자릿수의 의미다. 따라서 소수점을 정밀하게 표현하고자 한다면 유효자릿수가 더 많은 double이나 long double 자료형으로 선언해줘야 한다.

 

 

 

실수형 변수 선언

정수 자료형과 달리 실수 자료형은 선언할 때 약간의 주의를 요한다.  일반적으로 변수를 선언할 때는 [자료형 변수명 = 값] 형태로 선언하는데, 값 뒤에 특정한 시그널을 적어줘야 한다.

 

float 형을 선언할 때는 [float 변수명 = 값f] 처럼 값 뒤에 f를 붙여준다.

// float 변수명 = 값f;
float num = 14.56f;

 

double형을 선언할 때는 일반적인 형태로 [double 변수명 = 값] 형태로 선언한다.

// double 변수명 = 값;
double num = 16.78;

 

long double형을 선언할 때는 [long double 변수명 = 값l] 처럼 값 뒤에 l을 붙여준다.

// long double 변수명 = 값l;
long double num = 32.853l;

 

 

 

Source

1. C언어 코딩 도장: 8.0 실수 자료형 사용하기

2. C언어 코딩 도장: 8.1 실수형 변수 선언하기

3. C언어 코딩 도장: 8.3 최솟값과 최댓값 표현하기

반응형