본문 바로가기
C언어

세이버의 C언어 강의 18강_ 자료형이란 무엇인가 Part3_실수형

by 비원(Be one) 2019. 4. 21.
반응형

여러분 안녕하세요. 세이버입니다.

 

이번 강에서는 또 다른 자료형인 실수형에 대해서 배워보도록 하겠습니다.

혹시 자료형에 대한 개념이 부족하신 분들은 16강을 참고하여 주시길 바랍니다.

 

세이버의 C언어 강의 16강_ 자료형이란 무엇인가 : https://poci.tistory.com/23

 

세이버의 C언어 강의 16강_ 자료형이란 무엇인가

여러분 안녕하세요. 세이버입니다. 여러분들은 저번 강을 끝으로 조건문과 반복문을 배우셨습니다. 조건문과 반복문을 알고 계시면 대부분의 코드를 작성하실 수 있습니다. 이번 강에서는 여러분들의 프로그래밍..

poci.tistory.com


1. 실수형이란 무엇인가

실수형은 자료형의 형태 중 하나로 float, double, long double이 있습니다.

실수의 수학적 정의는 유리수와 무리수를 통칭하는 수입니다.

 

출처 : 네이버 백과

 

하지만 컴퓨터 언어에서의 실수는 사전적 의미와는 조금 다르게 소수점이 붙는 수를 뜻합니다.

 

즉, 실수형은 소수점이 붙는 수를 처리하는 자료형입니다.

실수형을 사용하는 이유는 소수점 부분을 계산함으로써 정수형보다 정밀한 값을 계산하기 위함입니다.

 

 

2. 실수형의 크기와 표현 범위

자료형들의 크기는 16강에서 소개해드렸습니다.

 

(16강 참조)

실수형의 크기를 표로 정리하면 다음과 같습니다.

float 4바이트
double 8바이트
long double 16바이트

 

저번 강에서는 크기를 정리한 표 다음에 정수형의 표현 범위를 계산할 수 있는 식을 소개해드렸지만,

아쉽게도 실수형은 표현 범위를 계산할 식이 정해지지 않았습니다.

 

대신 라이브러리 중 실수형의 표현 범위를 보여주는 라이브러리가 있기에 소개해드리겠습니다.

 

float.h 라이브러리의

FLT_MIN, FLT_MAX, (float의 최대, 최소)

DBL_MIN, DBL_MAX, (double의 최대, 최소)

LDBL_MIN, LDBL_MAX (long double의 최대, 최소)

위 6개의 예약어로 실수형의 표현 범위를 나타낼 수 있습니다.

 

 

출력된 값을 보시면 조금 이상한 점을 느낄 수 있습니다.

최솟값이 모두 0이고, long doulbe의 데이터는 모두 0으로 나옵니다.

 

왜 이렇게 나오는거지...

이렇게 출력되는 이유는 값을 고정소수점 방식으로 출력했기에 그렇습니다.

출력되는 값이 너무 크다 보니 오류가 발생한 것입니다.

그럼 고정소수점이 아닌 부동소수점으로 출력하면 어떻게 될까요??

 

서식 문자를 %e, %le, %lle로 바꾸면 부동소수점 방식으로 출력할 수 있습니다.

 

※ long double의 최댓값 부분의 오류가 있어 오타가 났습니다. 1.797693e+308이 정확한 값입니다.

 

그럼 고정소수점과 부동소수점은 무엇이 다를까요??

 

 

3. 고정소수점과 부동소수점

고정소수점(fixed point)이란 소수점을 기준으로 정수부와 소수부를 나누는 표현방식입니다.

우리가 흔히 사용하는 3.14와 같은 수가 정수부(3)와 소수부(0.14)를 나누는 고정소수점 방식입니다.

 

부동소수점(floating point)은 하나의 수를 고정소수점 부분을 나타내는 부분(가수)과 고정 소수점 위치를 나타내는 부분(지수)으로 나누어 표현하는 방법입니다.

3.14e+30에서 3.14e는 가수 부분, +30이 지수 부분입니다.

 

3.14e+30은 

이 식과 같은 의미로 고정소수점으로 나타내면 3140000000000000000000000000000.000000로 표현할 수 있습니다.

 

고정소수점은 한눈에 수를 알 수 있다는 장점이 있지만, 수가 커질수록 가독성이 떨어지는 단점이 있습니다.

 

반대로 부동소수점은 수가 커져도 가독성을 유지할 수 있지만,

한눈에 무슨 수인지 계산하기 조금 복잡하다는 것이 단점입니다.

 

4강의 중간 부분에 서식 문자의 종류를 표로 정리해두었습니다.

세이버의 C언어 강의 4강_좀 더 복잡하게 출력하기 : https://poci.tistory.com/6

 

세이버의 C언어 강의 4강_좀 더 복잡하게 출력하기

여러분 안녕하세요. 세이버입니다. 3강에서는 printf() 함수를 이용해서 한 문장만 출력하는 방법을 배웠습니다. 세이버의 C언어 강의 3강_간단한 문장 출력하기 : https://poci.tistory.com/5 세이버의 C언어 강..

poci.tistory.com

표에 나오는 %e, %E가 실수를 부동소수점으로 표현하는 서식 문자입니다.

※ 참고로 double형은 %le, %lE로 사용해야 오차를 줄일 수 있습니다.

 

 

4. TIP

지난 17강에서 정수형에서는 int형의 계산속도가 제일 빠르기에 많이 사용한다고 했습니다.

이와 마찬가지로 실수형에서는 double형을 제일 많이 사용합니다.

 

그 이유는 float형은 소수점 이하 6자리를 표현하지만,

double형은 소수점 이하 15자리를 표현하므로 정밀도가 높기 때문입니다.

 

float와 double형 변수에 각각 0.123456789012345를 대입한 후 출력해보면 이 같은 결과값을 출력합니다.

※.15f는 소수점 이하 15자리까지 출력하라는 서식 문자입니다. (5강 참조)

세이버의 C언어 강의 5강_서식문자 응용편 : https://poci.tistory.com/7

 

세이버의 C언어 강의 5강_서식문자 응용편

여러분 안녕하세요. 세이버입니다. 이번 강의에서는 지난 강의에서 배웠던 서식문자에 대하여 조금 더 확장해서 배워보도록 하겠습니다. 1. 실수형 서식문자를 사용해보자. 지난 강에서는 정수형 서식문자 %d만..

poci.tistory.com

 

float형인 num1의 출력 값을 보시면 대입한 값과 다른 것을 보실 수 있습니다.

float형의 소수점 이하 6자리까지만 유효하기에 그 이후 값은 오류가 발생하는 것입니다.

그에 비해 double형은 제대로 출력됨을 확인할 수 있습니다.


이번 강의는 여기까지입니다.

다음 강에서는 자료형의 마지막 파트인 자료현 변환에 대해서 소개해드리겠습니다.

 

오늘도 수고하셨습니다.

 


정리

- 실수형 : 소수점이 있는 수를 처리하는 자료형

- 실수형을 사용하는 이유 : 정밀한 값을 처리하는 데 사용

- 고정소수점 : 소수점을 기준으로 정수부와 소수부로 나누는 표현방식 (%f, %lf)

     - 장점 : 소수점의 자리가 낮은 수의 경우 한눈에 보기 쉽다. 

     - 단점 : 소수점의 자리가 높은 수의 경우 표현하기 어렵다.

- 부동소수점 : 지수부와 가수부로 나누는 표현방식 (%e, %le)

     - 장점 : 값이 큰 실수를 표현하기 쉽다.

     - 단점 : 무슨 수인지 한눈에 확인하기 복잡하다. 

- 실수형은 보다 정밀한 계산이 가능한 double형을 선호한다.


강의가 유익하셨거나 마음에 드셨으면 구독과 좋아요, 댓글 부탁드립니다.

궁금하신 점이나 질문은 댓글이나 메일을 남겨주세요.

 

poci5003@gmail.com

 

반응형