C 언어 실수형 변수
개요
C 언어에서 실수형 변수는 부동소수점 수를 저장하기 위해 사용되는 데이터 타입이다. 표준 C에서는 float, double, long double 세 종류의 실수형 기본 타입을 정의하고 있으며, 각각은 정밀도와 메모리 사용량이 다르다. 실수형 변수는 수학적 연산, 과학·공학 계산, 그래픽 처리 등 소수점 이하의 값을 다루어야 하는 다양한 상황에서 활용된다.
주요 타입
| 타입 | 최소 저장 크기* | 정밀도(유효숫자) | 비고 |
|---|---|---|---|
float |
4 바이트 | 약 6~7 자릿수 | IEEE 754 표준에 따라 단정밀도 부동소수점 |
double |
8 바이트 | 약 15~16 자릿수 | IEEE 754 표준에 따라 배정밀도 부동소수점 |
long double |
구현에 따라 8·10·12·16 바이트 등 | 구현에 따라 다름 | 확장 정밀도 부동소수점; C 표준은 최소 크기만 규정 |
* 표준 C(C89, C99, C11, C18)는 각각의 타입이 최소한 위와 같은 크기를 가져야 함을 규정한다. 실제 구현에서는 하드웨어와 컴파일러에 따라 크기가 더 클 수 있다.
표준 헤더와 매크로
실수형 변수와 관련된 한계값 및 특성은 <float.h> 헤더에 정의된 매크로나 상수로 제공된다.
FLT_MAX,FLT_MIN,FLT_EPSILON–float타입의 최대값, 최소 양수 정규화값, 머신 epsilonDBL_MAX,DBL_MIN,DBL_EPSILON–double타입에 대한 동일 정보LDBL_MAX,LDBL_MIN,LDBL_EPSILON–long double타입에 대한 정보
선언·초기화 예시
float f = 3.14f; // f 접미사로 float 리터럴 지정
double d = 2.718281828; // double은 접미사 없이 기본 타입
long double ld = 1.6180339887498948482L; // L 접미사로 long double 리터럴 지정
형변환
실수형 변수 간 또는 실수형↔정수형 간의 변환은 암시적(자동) 또는 명시적(형 캐스트)으로 이루어진다. 예를 들어, int i = (int)d;는 double 값을 정수형으로 변환한다.
연산
C 언어는 실수형에 대해 다음과 같은 연산자를 제공한다.
- 산술 연산:
+,-,*,/,%(정수형 전용) → 실수형에서는%가 사용되지 않는다. - 복합 연산:
+=,-=,*=,/= - 비교 연산:
==,!=,<,>,<=,>= - 단항 연산:
+,-,++,--
특수 값
IEEE 754 규격을 따르는 구현에서는 다음과 같은 특수 실수값을 지원한다.
- 양의/음의 무한대 (
+∞,-∞) – 연산 결과가 범위를 초과할 때 생성 - NaN (Not a Number) – 0으로 나누기, 부정형 연산 등 결과가 정의되지 않을 때 생성
- 양의/음의 영 – 부호가 있는 0 값
특수 값에 대한 판단은 <math.h>에 정의된 isnan, isinf, signbit와 같은 함수로 수행한다.
표준 준수와 구현 차이
C 표준은 실수형 변수에 대해 정밀도와 표현 방법을 최소한 보장하지만, 실제 구현은 하드웨어 아키텍처와 컴파일러 옵션에 따라 차이가 있다. 예를 들어, 일부 컴파일러는 long double을 double과 동일하게 구현하기도 한다.
관련 키워드·용어
- 부동소수점(floating‑point) – 과학·공학 계산에 적합하도록 지수부와 가수부를 이용해 실수를 근사적으로 표현하는 방식
- 머신 epsilon – 특정 실수형에서 1과 구별될 수 있는 가장 작은 양수
- 정규화(Normalized) – 가수부가 비정규(leading zero)인 경우가 아닌, 가수부가 가장 앞자리 비트가 1인 형태
- 비정규화(Subnormal) – 매우 작은 값으로 정규화 형식이 적용되지 않아 정확도는 낮지만 점진적인 감소를 표현할 수 있음
참조
- ISO/IEC 9899:1999 (C99) – 부동소수점 타입 정의
- ISO/IEC 9899:2011 (C11) –
<float.h>매크로와 특수값 지원 - IEEE 754‑2008 – 부동소수점 연산 및 표현 규격
비고
C 언어 실수형 변수는 프로그래밍에서 널리 사용되는 기본 개념이며, 위와 같이 표준에 정의된 타입과 관련 매크로·함수를 통해 정밀도와 범위를 제어한다.