실수 데이터 형식 사용하기

소수점 이하의 숫자를 다루는 실수 데이터 형식(부동 소수점(Floating Point) 데이터 형식)에 대해서 살펴보겠습니다. 부동 소수점 데이터 형식으로 표현되는 실수를 컴퓨터에서 표현하는 방법은 복잡합니다. 이러한 표현 방법에 대해서 설명하는 것은 이 강의의 범위를 벗어나기에 실수 데이터 형식은 3.14와 같이 우리가 평상시에 사용하던 방식의 실수 그 자체로 이해하면 됩니다.

실수 데이터는 부동 소수점 방식의 데이터 형식인 float, double, long double 키워드를 제공합니다.

 

[그림] 실수 데이터 형식

실수 데이터 형식.png

 

Windows 운영체제를 기준으로 실수 데이터 형식을 나타내는 double 64비트, float 32비트, long double64비트의 크기를 갖습니다.

실수 데이터 형식의 종류는 다음 표와 같습니다. 너무 어렵게 생각할 필요없이 float, double, long double 키워드가 실수 데이터를 표현한다는 것만 기억하면 됩니다.

 

[] 실수 데이터 형식의 종류(Windows 기준)

종류

키워드

크기

비고

부동 소수점 방식

float

4바이트

IEEE 754 단정밀도 부동 소수점

double

8바이트

IEEE 754 배정밀도 부동 소수점

long double

8바이트

IEEE 754 배정밀도 부동 소수점

 

실수 데이터 형식이 갖는 크기와 값의 범위는 아래 그림과 같습니다(정수 데이터 형식과 마찬가지로 여기에 나오는 값들의 크기와 범위는 외울 필요는 없습니다. 필요할 때 다시 찾아보면 됩니다.). 아래 표기법은 지수 표기법으로 표현했는데 float 데이터 형식의 최댓값은 약 3.4 곱하기 1038승 정도로 볼 수 있습니다.

 

[그림] 실수 데이터 형식의 범위(Windows)

C 언어 실수의 범위.png

 

 

참고: 지수 표기법

아주 큰 수와 아주 작은 수를 표현할 때에는 지수 표기법(Exponential Notation)을 사용합니다. 지수 표기법은 과학적 표기법(Scientific Notation)이라고도 합니다.

지수 표기법은 아주 크거나 아주 작은 숫자들을 십진법으로 편하게 작성하여 표현하는 방법입니다. 예를 들어, 숫자 12345678901 1.23E+10으로 표시하며, 이는 1.23 곱하기 10 10승입니다.

지수 표기법은 숫자를 "-d.ddd…E+ddd" 또는 "-d.ddd…e+ddd" 형태의 문자열로 변환합니다. 여기서 각 "d"는 숫자(0-9)를 나타냅니다. 숫자가 음수이면 문자열 앞에 빼기 기호가 붙습니다. 소수점 앞에는 항상 숫자가 하나만 있어야 합니다.

l  실수E+지수: 실수 곱하기 지수만큼의 10의 거듭제곱을 나타냅니다.

n  -3.4E+38: -3.4 곱하기 1038승입니다.

 

n  1.7E+308: 1.7 곱하기 10308승입니다

 

예제: 실수 데이터 형식 사용하기 

C 언어에서 기본으로 제공하는 실수 데이터 형식을 사용하겠습니다. C 언어에서 실수 데이터 형식은 float, double, long double의 키워드를 사용하여 소수점이 있는 실수 데이터는 저장할 수 있습니다. 특별한 경우가 아니면 double 형식을 기본으로 사용합니다. 

 

따라하기

<코드> floating_point.c

// 실수 데이터 형식 사용하기 
#include <stdio.h>
#include <float.h> // 실수 데이터 형식의 최댓값과 최솟값에 대한 상수 정의

int main(void)
{
	//[1] 실수 데이터 형식 변수 선언
	float f = 3.141592f; // 단정밀도 부동소수점 변수, 숫자 뒤에 f 접미사 붙임
	double d = 3.141592; // 배정밀도 부동소수점 변수, 접미사를 붙이지 않음
	long double ld = 3.141592l; // 배정밀도 부동소수점 변수 접미사 l을 붙임

	//[2] 자리 표시자: float(%f), double(%f), long double(%Lf)
	printf("%.6f %.6f %.6Lf\n", f, d, ld); // 3.141592 3.141592 3.141592

	// 서식 지정자로 지수 표기법 사용: float(%e), double(%e), long double(%Le)
	printf("%e %e %Le\n", f, d, ld); // 3.141592e+00 3.141592e+00 3.141592e+00

	//[3] 실수 데이터 형식 크기: sizeof로 데이터 형식 크기를 알 수 있고 %llu로 출력
	// 리눅스 환경의 GCC 컴파일러에서는 서식 지정자로 %llu 대신에 %lu로 출력해야 함
	printf("%llu %llu %llu\n", sizeof(float), sizeof(double), sizeof(long double));

	//[4] 실수 데이터 형식의 범위: 큰 숫자이므로 지수 표기법으로 출력
	printf("float: %e ~ %e\n", FLT_MIN, FLT_MAX);
	printf("double: %e ~ %e\n", DBL_MIN, DBL_MAX);
	printf("long double: %Le ~ %Le\n", LDBL_MIN, LDBL_MAX);

	return 0;
}

</코드>

<출력> Windows

3.141592 3.141592 3.141592

3.141592e+00 3.141592e+00 3.141592e+00

4 8 8

float: 1.175494e-38 ~ 3.402823e+38

double: 2.225074e-308 ~ 1.797693e+308

long double: 2.225074e-308 ~ 1.797693e+308

</출력>

<출력> Linux

3.141592 3.141592 3.141592

3.141592e+00 3.141592e+00 3.141592e+00

4 8 16

float: 1.175494e-38 ~ 3.402823e+38

double: 2.225074e-308 ~ 1.797693e+308

long double: 3.362103e-4932 ~ 1.189731e+4932

</출력>

[1] 실수 데이터 형식은 각각 float, double, long double 키워드를 사용하여 데이터를 저장합니다. 이 때 실수 데이터는 double 키워드를 기본으로 사용하겠습니다. 

[2] 실수 데이터 형식 출력에 대한 서식 지정자는 %f, %Lf를 기준으로 %e, %Le 형태로 지수 표기법으로도 표현이 가능합니다. 

[3] sizeof 연산자라는 것을 통해서 실수 데이터 형식의 크기를 구할 수가 있습니다. 여기서 주의할 것은 데이터 형식의 크기는 운영체제마다 다를 수 있습니다. 

[4] float.h 헤더 파일에는 실수 데이텨 형식의 최댓값과 최솟값을 담고 있는 상수가 정의되어 있습니다. FLT_MIN, FLT_MAX, DBL_MIN, DBL_MAX, LDBL_MIN, LDBL_MAX의 6개 상수로 float, double, long double의 최댓값과 최솟값을 알 수 있습니다. 이것도 마찬가지로 운영체제마다 다를 수 있습니다.

 

 

 

 

 

 

 

 

끝.

 

 

 

 

Comments

Be the first to post a comment

Post a comment