19. 실수는 근사치

C언어 – 실수 표현과 메모리 구조

0.1에서 0.5사이에 몇 개의 실수가 있을까요?

여러분이 아는 것처럼 무한 개의 실수가 존재하죠.
따라서 0.1과 0.5 사이의 모든 실수를 유한한 메모리에 표현할 수 없어요.
실제로 컴퓨터에서 실수 표현은 오차 범위 내에서 값을 표현하는 근사치예요.

C언어에서는 실수 형식으로 float 형식과 double 형식을 제공해요.
float 형식은 4바이트이며 double 형식은 8바이트예요.
그리고 C언어에서 실수 표현은 기본적으로 double 형식으로 취급하며 float 형식을 표현할 때는 뒤에 f를 붙여요.
그렇지만 C언어에서 실수 형식 사이에는 서로 묵시적 형변환을 제공해서 실수 뒤에 f를 붙이지 않아도 가능하답니다.
물론 값 잘림 현상이 발생할 수 있으니 주의하세요.

◈ 실수 형식은 오차 범위를 갖는 근사값

#include <stdio.h>
int main()
{
    float f = 0.0f; //float 형 변수 f를 선언하고 0.0으로 초기화
    f = f+0.1f; //변수 f에 0.1을 더함
    printf("%.9f\n",f); //변수 f값을 소수점 이하 9자리까지 출력
    f = f+0.1f; //변수 f에 0.1을 더함
    printf("%.9f\n",f); //변수 f값을 소수점 이하 9자리까지 출력
    f = f+0.1f; //변수 f에 0.1을 더함
    printf("%.9f\n",f); //변수 f값을 소수점 이하 9자리까지 출력
    return 0;
}

◈ 실행 결과

0.100000001
0.200000003
0.300000012