코딩 농장/C 언어

C언어 실수 출력

GreenBNN 2021. 5. 19. 18:07

#include <stdio.h>

int main(void) {
    float c = 38.8;
    printf("%f\n", c);
    return 0;
}

실수를 입력 후 출력하려고 했지만 입력한 대로 나오지 않는다. 뭐가 문제일까?


#include <stdio.h>

int main(void) {
    float c = 38.8;
    printf("%.2f\n", c);
    return 0;
}

컴퓨터의 반올림 오차 때문이다.

0.1를 이진수로 변환할 때 아래의 방식으로 한다.

0.1 * 2 = 0.2 → 0

0.2 * 2 = 0.4 → 0

0.4 * 2 = 0.8 → 0

0.8 * 2 = 1.6 → 1

0.6 * 2 = 1.2 → 1

0.2 * 2 = 0.2 → 0 .....

0.000110011001100 ......

단순한 실수도 이진수로 변환하면 무한소수가 된다.

따라서 원하는 실수로 출력하기 위해선 소수 몇번째 자리까지 반올림을 해야한다.