floating_literal — 부동 소수점 리터럴

floating_literal — 부동 소수점 리터럴 (Floating-point literal)

**부동 소수점 리터럴(floating-point literal)**은 소스 파일에서 값을 지정한 컴파일 타임 상수를 정의해요. 즉 double(또는 float) 값을 코드에 직접 적는 문법이에요.

3.14, 1e10, 0x1.fp3 같은 형태가 부동 소수점 리터럴이에요.

출처: cppreference

본문

문법 (Syntax)

digit-sequence decimal-exponent suffix                // (1)
digit-sequence . decimal-exponent suffix              // (2)
digit-sequence . digit-sequence decimal-exponent suffix  // (3)
0x | 0X hex-digit-sequence hex-exponent suffix        // (4)
0x | 0X hex-digit-sequence . hex-exponent suffix      // (5)
0x | 0X hex-digit-sequence . hex-digit-sequence hex-exponent suffix  // (6)
  • (1) 소수점 없는 정수를 나타내는 자릿수 시퀀스. 이 경우 지수는 선택이 아니에요: 1e10
  • (2) 소수점 바로 뒤에 소수 부분이 없는 형태: 1.
  • (3) 정수 부분과 소수 부분이 모두 있는 일반 형태: 1.5
  • (4)~(6) 16진수 부동 소수점 리터럴: 0x1.fp3
1e10     // double 10000000000.0
3.14     // double
0x1.fp3  // 16진: (1 + 15/16) * 2^3 = 15.5

**지수(decimal exponent)**는 e 또는 E 뒤에 (선택적으로 부호를 가진) 소수 자릿수를 붙인 형태이고, 값을 10의 거듭제곱으로 곱해요. 1e31000.0이에요.

**16진 지수(hex exponent)**는 p 또는 P 뒤에 (선택적으로 부호를 가진) 소수 자릿수를 붙인 형태이고, 값을 2의 거듭제곱으로 곱해요. 0x1p416.0이에요. 16진 리터럴에서는 p 지수가 필수예요.

**suffix(접미사)**로 타입을 지정해요.

접미사 타입
(없음) double
f / F float
l / L long double
float f = 1.5f;        // float
double d = 3.14;       // double
long double ld = 2.5L; // long double

부동 소수점 리터럴은 기본적으로 double이므로, float 변수에 넣을 때는 f 접미사를 붙여 의도를 명확히 하는 것이 좋아요.

더 알아보기 (Learn more)

cppreference