부동 소수점수 (Floating point number)
- 정수부와 소수부가 구분되는 수 (예. 7.56)
- C++에서 소수부가 있는 수를 표현하거나 큰 수 혹은 작은 수를 표현할 때 용이하다
- 소수부가 있는 부동 소수점수는 하나으 수치 데이터가 두 부분으로 나뉘어 저장된다.
(기본값 the base value , 스케일 the scailing factor)
3.14159라는 수의 기본값은 0.314159이고 스케일은 10이다.
표기법
일반적인 표기 (General notation)
- 정수부와 소수부를 온점(period)으로 구분하는 표기법
ex.
12.34
9390001.32
0.00023
8.0
* 유럽에선 소수점을 마침표(Period) 대신 반점(Comma)로 표기하는 관습이 있는데,
C++에선 이를 반영하고 있음
(소스 코드 상에서는 마침표 대신 반점으로 대체하는 것은 허용하지 않으나,
입출력은 마침표 대신 반점으로 출력하는 것을 지원하고 있다.)
지수 표기 (E notation)
- 과학적 표기법(Scientific notation) 과 유사한 표기법
- 알파벳 'E' 또는 'e'로 지수부와 가수부를 구분하는 표기법
(1.23E45 에서 1.23은 가수(Mantissa), 45를 지수(Exponent)라 한다.
- e는 \(10^n\) 을 의미함
ex.
2.52e+8 // 2.52 * 10^+08
-18.32e13 // -18.32 * 10^+13
9.11e-31 // 9.11 * 10^-31
※ 수치에 빈칸은 허용하지 않는다.
45.3 E-7 // Compile error!
Floating Point Data Type
- 부동 소수점형 데이터 타입 : float(최소 32 bits), double(float보다 작지 않으면서 최소 48 bits), long double
float 일반적으로 32비트
double 일반적으로 64비트 (최소 float 이상)
long double 일반적으로 80, 96, 128비트 (최소 double 이상)
- 위 데이터형들은 유효 숫자의 개수와 지수의 최소 허용 범위가 각기 다르다.
지수의 허용 범위는 세 가지 모두 최소한 -37 에서 +37까지를 보장하고 있다.
cfloat 또는 float.h 헤더 파일에 C++이 허용하는 한계값들을 확인할 수 있다.
Example. Borland C++ Builder의 float.h 헤더파일 내용 중 일부
#define DBL_DIG 15
#define FLT_DIG 6
#define LDBL_DIG 18
#define DBL_MANT_DIG 53
#define FLT_MANT_DIG 24
#define LDBL_MANT_DIG 64
#define DBL_MAX_10_EXP +308
#define FLT_MAX_10_EXP +38
#define LDBL_MAX_10_EXP +4932
#define DBL_MIN_10_EXP -307
#define FLT_MIN_10_EXP -37
#define LDBL_MIN_10_EXP -4931
부동 소수점형 상수
- 부동 소수점형 상수는 기본적으로 double형으로 저장된다.
- float 형으로 저장하려는 경우, 접미어로 F or f
- long double 형으로 저장하려는 경우, 접미어로 L or l 을 사용한다.
4.567F // float type constant
2.34E+22F // float type constant
1.234 // double type constant
2.345E28 // double type constant
2.2L // long double type constant
72.5849E-29L // long double type constant
데이터형 분류
signed integer type
- signed char, short, int, long
unsigned integer type
- unsigned char, char16_t, char32_t, unsigned short, unsigned int, unsigned long
floating-point type
- float, double, long double
arithmetic type
- integer type + floating-point type