본문 바로가기

프로그래밍 언어/C

C 언어 실수형 데이터 타입 정리: float, double, long double

C 언어 실수형 데이터 타입 정리: float, double, long double

실수형 데이터는 C 언어에서 정밀한 수치 계산과학적 연산을 구현할 때 반드시 필요한 요소입니다. 그러나 많은 개발자들이 float, double, long double의 차이와 사용법에 대해 막연하게만 알고 있는 경우가 많습니다. 본 글에서는 세 타입의 정밀도, 메모리 크기, 표현 범위 등을 비교 분석하고, 실전에서 어떤 상황에 어떤 타입을 선택해야 하는지 구체적인 예시와 함께 안내합니다.

 

 

목차

  1. float의 기본 개념과 특징
  2. double의 세부 특성과 float과의 차이
  3. long double의 확장된 정밀도
  4. 정밀도(Precision)와 반올림 오차
  5. 메모리 크기 및 시스템 의존성
  6. 입출력 시 포맷 지정 방법
  7. 실전에서의 선택 기준 및 팁

 

1. float의 기본 개념과 특징

float은 C 언어에서 가장 기본적인 실수형 타입으로, 단정도 부동소수점(Single-precision)으로 분류됩니다.

  • 일반적으로 4바이트(32비트) 사용
  • 소수점 이하 약 6~7자리의 정밀도
  • 지수 범위: 약 ±1038
float pi = 3.141592f;
  

Tip: float 상수에는 반드시 f 접미사를 붙여야 명확한 float 리터럴로 인식됩니다.

 

 

 

2. double의 세부 특성과 float과의 차이

double배정도 부동소수점(Double-precision)으로, 실수 연산에서 가장 널리 쓰입니다.

  • 8바이트(64비트) 사용
  • 소수점 이하 약 15~16자리의 정밀도
  • 지수 범위: 약 ±10308
  • 기본 실수형 리터럴은 double로 처리됨
double e = 2.718281828459045;
  

 

 

 

3. long double의 확장된 정밀도

long double은 가장 높은 정밀도를 제공하지만, 구현 방식은 플랫폼에 따라 다릅니다.

타입 크기 정밀도
float 4 bytes ~7자리
double 8 bytes ~15자리
long double 10~16 bytes ~19~21자리

 

 

 

4. 정밀도(Precision)와 반올림 오차

실수형 타입은 이진 부동소수점 방식으로 저장되기 때문에, 모든 실수를 정확히 표현할 수 없습니다. 그 결과, 덧셈이나 뺄셈에서도 오차가 발생할 수 있습니다.

#include <stdio.h>

int main() {
    float a = 0.1f;
    if (a == 0.1)
        printf("같음\n");
    else
        printf("다름\n"); // 출력됨
    return 0;
}
  

 

 

 

 

5. 메모리 크기 및 시스템 의존성

C 언어는 시스템 종속적인 언어이기 때문에, sizeof()를 통해 타입의 실제 크기를 확인하는 것이 중요합니다.

printf("float 크기: %lu\n", sizeof(float));
printf("double 크기: %lu\n", sizeof(double));
printf("long double 크기: %lu\n", sizeof(long double));
  

 

 

 

6. 입출력 시 포맷 지정 방법

printf()scanf() 사용 시, 타입에 따라 포맷 지정자가 달라야 정확한 입출력이 가능합니다.

  • %f: float 또는 double
  • %Lf: long double

주의: float은 printf에서 자동으로 double로 변환되므로 %f 사용 가능

 

 

 

7. 실전에서의 선택 기준 및 팁

다음 기준을 참고하여 타입을 선택하면 안정성과 효율성을 높일 수 있습니다:

  • 정밀도가 필요 없는 경우: float (메모리 절약)
  • 정확한 계산이 필요한 대부분의 경우: double
  • 고정밀 과학 계산: long double
  • 데이터 전송 및 저장 최적화: float