Programming/C Lang Lecture

[C언어 강좌]5강 : 변수에 대한 이해(실수형)

yutaejeong 2014. 7. 19. 13:20


Written By Imperfect

[C언어 강좌]5강 : 변수에 대한 이해(실수형)


목차

1. 실수형 변수의 종류

2. 실수형 변수 사용해보기


1. 실수형 변수의 종류

실수형 변수에는 아래와 같은 종류가 있습니다.


형식이름

바이트

값의 범위

float

4

 3.4E+/-38(7개의 자릿수)

double

8

1.7E+/-308(15개의 자릿수)


쉽게말해 float의 범위는  3.4*10의 -38승 ~ 3.4*10의 38승이고,

double의 범위는 1.7*10의-308승 ~ 1.7*10의 308승 입니다.

그냥 범위가 엄청나다는 것만 알면됩니다.

그리고 실수형변수는 정수형변수와 다르게 소수점 자리까지 표시할 수 있습니다.


2. 실수형 변수 사용해보기

실수형변수를 출력을 해봅시다.

이전 정수형(int)에서는 printf로 출력할때 %d를 사용했었습니다.

하지만 이번엔 %f를 사용해야 합니다.

아래는 그 예시 입니다.

1
2
3
4
5
6
7
8
#include<stdio.h>
int main()
{
    float flo_ = 0.123456f;
    double dou_ = 0.654321;
    printf("float : %f, double : %f", flo_, dou_);
    return 0;
}
(1)float형 변수의 뒤엔 접미사(?) f나 F를 붙이는것이 표준입니다. GCC는 그런 에러가 없지만 f,F를 붙이지 않으면 컴파일러는 소수를 float형이 아닌 double형으로 인식하기 때문에 어떤 컴파일러들은 값의 손실이 일어나는것을 막기 위해 에러를 출력하기도 합니다.

(2)위의 설명에서 값의 손실이 일어나는 이유는 표에서 설명한것처럼 double 자료형의 크기는 8 byte인데 이보다 크기가 작은 4 byte인 float형에 double형의 값을 대입하기에 값의 손실이 일어나게 됩니다.

아래는 위의 예시 출력 결과 입니다.

위처럼 소수점6자리까지  표시 합니다.

그 이유는 %f는 기본적으로 소수점 6자리까지만 출력하기 때문인데요, 그 이상을 출력하는 방법은 나중에 설명하겠습니다.

하지만 만약 소수점 아래 7자리 이상까지 지정하고 출력하면 어떻게 출력이 될까요?

아래의 예시를 봅시다.


1
2
3
4
5
6
7
8
#include<stdio.h>
int main()
{
    float flo_ = 0.123456789f;
    double dou_ = 0.987654321;
    printf("float : %f, double : %f", flo_, dou_);
    return 0;
}

위의 예시에선 flo_dou_ 의 값을 각각 소수점 아래 9자리까지 지정하였습니다.

그렇다면 출력을 한번 봅시다.

위에 보시면 flo_의 값은 0.123457로, dou_의 값은 0.987654로 출력된것을 알수있습니다.

위와같이 소수점 표시 한계 이상으로 소수점을 입력했을 경우, 소수점 7자리에서 반올림 된 값이 나오게 되는것 입니다.

이제 저번에 배웠던 내용과 섞어서 소스를 작성해 봅시다.

1
2
3
4
5
6
7
8
9
#include<stdio.h>
int main()
{
    float flo_ = 0.123456789f;
    double dou_ = 0.987654321;
    int result = flo_ + dou_;
    printf("float : %f, double : %f, float + double = %d", flo_, dou_, result);
    return 0;
}

위에서는 int형의 변수에 float형의 변수와 double형의 변수를 더한값을 지정하였습니다.

그렇다면 컴파일 결과가 어떻게 나왔을까요? 아래의 출력결과를 봅시다.

결과가 1이 나왔습니다.

왜 1이 나왔을까요, 직접 계상해봅시다.

flo_의 값인 0.123456789dou_의 값인 0.987654321을 더하면

1.11111111이 나옵니다.

하지만 int형은 소수점을 표현할수 없기때문에 소수점 아래 첫번쨰 자리에서 반올림을 합니다.

그래서 결과가 1이 나오게 된것입니다.

그래서 오늘강좌는 여기까지 하겠습니다.


다음강좌

6강 : 변수에 대한 이해(문자형)


[C언어 강좌]5강 : 변수에 대한 이해(실수형)