C numeric limits interface
참고 항목 std::numeric_limits 인터페이스.
목차 |
정수형의 한계
핵심 언어 정수형의 한계 |
|
|
헤더 파일에 정의됨
<climits>
|
|
|
CHAR_BIT
|
바이트의 비트 너비
(매크로 상수) |
|
MB_LEN_MAX
|
멀티바이트 문자에서 최대 바이트 수
(매크로 상수) |
|
CHAR_MIN
|
char
의 최소값
(매크로 상수) |
|
CHAR_MAX
|
char
의 최댓값
(매크로 상수) |
|
SCHAR_MIN
SHRT_MIN
INT_MIN
LONG_MIN
LLONG_MIN
(C++11)
|
부호 있는
signed
char
,
short
,
int
,
long
및
long
long
의 최솟값
(매크로 상수) |
|
SCHAR_MAX
SHRT_MAX
INT_MAX
LONG_MAX
LLONG_MAX
(C++11)
|
signed char, short, int, long 및 long long의
signed
char
,
short
,
int
,
long
및
long
long
각각의 최댓값
(매크로 상수) |
|
UCHAR_MAX
USHRT_MAX
UINT_MAX
ULONG_MAX
ULLONG_MAX
(C++11)
|
unsigned
char
,
unsigned
short
,
unsigned
int
,
unsigned long 및 unsigned long long 의 최대값 (매크로 상수) |
|
헤더에 정의됨
<cwchar>
|
|
|
헤더 파일에 정의됨
<cstdint>
|
|
|
WCHAR_MIN
(C++11)
|
wchar_t
의 최소값
(매크로 상수) |
|
WCHAR_MAX
(C++11)
|
wchar_t
의 최댓값
(매크로 상수) |
라이브러리 타입 별칭의 한계 |
|
|
헤더 파일에 정의됨
<cstdint>
|
|
|
PTRDIFF_MIN
(C++11)
|
std::ptrdiff_t
의 최솟값
(매크로 상수) |
|
PTRDIFF_MAX
(C++11)
|
std::ptrdiff_t
의 최댓값
(매크로 상수) |
|
SIZE_MAX
(C++11)
|
std::size_t
의 최댓값
(매크로 상수) |
|
SIG_ATOMIC_MIN
(C++11)
|
std::sig_atomic_t
의 최소값
(매크로 상수) |
|
SIG_ATOMIC_MAX
(C++11)
|
std::sig_atomic_t
의 최댓값
(매크로 상수) |
|
WINT_MIN
(C++11)
|
std::wint_t
의
최소값
(매크로 상수) |
|
WINT_MAX
(C++11)
|
std::wint_t
의 최댓값
(매크로 상수) |
참고 사항
이 상수들의 타입은 CHAR_BIT 와 MB_LEN_MAX 를 제외하고, 이들이 설명하는 타입의 객체에 적용된 정수 승격 의 결과와 일치해야 합니다: CHAR_MAX 는 int 또는 unsigned int 타입을 가질 수 있지만 char 타입은 절대 가질 수 없습니다. 마찬가지로 USHRT_MAX 는 부호 없는 타입일 수 없으며: 그 타입은 int 일 수 있습니다.
독립형
구현체는
std::sig_atomic_t
및/또는
std::wint_t
typedef 이름을 제공하지 않을 수 있으며, 이 경우
SIG_ATOMIC_*
및/또는
WINT_*
매크로도 해당하게 존재하지 않습니다.
예제
#include <climits> #include <cstdint> #include <iomanip> #include <iostream> int main() { constexpr int w = 14; std::cout << std::left; # define COUT(x) std::cout << std::setw(w) << #x << " = " << x << '\n' COUT( CHAR_BIT ); COUT( MB_LEN_MAX ); COUT( CHAR_MIN ); COUT( CHAR_MAX ); COUT( SCHAR_MIN ); COUT( SHRT_MIN ); COUT( INT_MIN ); COUT( LONG_MIN ); COUT( LLONG_MIN ); COUT( SCHAR_MAX ); COUT( SHRT_MAX ); COUT( INT_MAX ); COUT( LONG_MAX ); COUT( LLONG_MAX ); COUT( UCHAR_MAX ); COUT( USHRT_MAX ); COUT( UINT_MAX ); COUT( ULONG_MAX ); COUT( ULLONG_MAX ); COUT( PTRDIFF_MIN ); COUT( PTRDIFF_MAX ); COUT( SIZE_MAX ); COUT( SIG_ATOMIC_MIN ); COUT( SIG_ATOMIC_MAX ); COUT( WCHAR_MIN ); COUT( WCHAR_MAX ); COUT( WINT_MIN ); COUT( WINT_MAX ); }
가능한 출력:
CHAR_BIT = 8 MB_LEN_MAX = 16 CHAR_MIN = -128 CHAR_MAX = 127 SCHAR_MIN = -128 SHRT_MIN = -32768 INT_MIN = -2147483648 LONG_MIN = -9223372036854775808 LLONG_MIN = -9223372036854775808 SCHAR_MAX = 127 SHRT_MAX = 32767 INT_MAX = 2147483647 LONG_MAX = 9223372036854775807 LLONG_MAX = 9223372036854775807 UCHAR_MAX = 255 USHRT_MAX = 65535 UINT_MAX = 4294967295 ULONG_MAX = 18446744073709551615 ULLONG_MAX = 18446744073709551615 PTRDIFF_MIN = -9223372036854775808 PTRDIFF_MAX = 9223372036854775807 SIZE_MAX = 18446744073709551615 SIG_ATOMIC_MIN = -2147483648 SIG_ATOMIC_MAX = 2147483647 WCHAR_MIN = -2147483648 WCHAR_MAX = 2147483647 WINT_MIN = 0 WINT_MAX = 4294967295
부동 소수점 타입의 한계
|
헤더에 정의됨
<cfloat>
|
|
|
FLT_RADIX
|
세 가지 부동 소수점 타입의 표현에 사용되는 기수(정수 진법)
(매크로 상수) |
|
DECIMAL_DIG
(C++11)
|
long
double
형식에서 10진수로
DECIMAL_DIG
자리 이상의 정밀도로 변환하고 다시
long
double
형식으로 변환할 때 동일한 값이 보장되는 변환: 이는
long
double
형식의 직렬화/역직렬화에 필요한 10진수 정밀도입니다
(참고:
std::numeric_limits::max_digits10
)
(매크로 상수) |
|
FLT_DECIMAL_DIG
DBL_DECIMAL_DIG
LDBL_DECIMAL_DIG
(C++17)
|
float
/
double
/
long
double
형식에서 최소
FLT_DECIMAL_DIG
/
DBL_DECIMAL_DIG
/
LDBL_DECIMAL_DIG
자릿수의 십진수로 변환하고 다시 되돌리는 것이 항등 변환입니다: 이는 부동 소수점 값을 직렬화/역직렬화하는 데 필요한 십진 정밀도입니다 (참조:
std::numeric_limits::max_digits10
). 각각 최소
6
,
10
,
10
으로 정의되거나, IEEE float의 경우
9
, IEEE double의 경우
17
입니다.
(매크로 상수) |
|
FLT_MIN
DBL_MIN
LDBL_MIN
|
float
,
double
및
long
double
의 정규화된 최소 양수 값
(매크로 상수) |
|
FLT_TRUE_MIN
DBL_TRUE_MIN
LDBL_TRUE_MIN
(C++17)
|
float, double 및 long double의
최소 양수 값 (매크로 상수) |
|
FLT_MAX
DBL_MAX
LDBL_MAX
|
각각
float
,
double
및
long
double
의 유한 최댓값
(매크로 상수) |
|
FLT_EPSILON
DBL_EPSILON
LDBL_EPSILON
|
1.0
과 다음 표현 가능한 값 사이의 차이
float
,
double
및
long
double
각각에 대한
(매크로 상수) |
|
FLT_DIG
DBL_DIG
LDBL_DIG
|
텍스트 →
float
/
double
/
long
double
→ 텍스트 왕복 변환 시 반올림이나 오버플로로 인한 변경 없이 보존되는 소수 자릿수
(설명은
std::numeric_limits::digits10
참조)
(매크로 상수) |
|
FLT_MANT_DIG
DBL_MANT_DIG
LDBL_MANT_DIG
|
FLT_RADIX
기수로 표현 가능한 자릿수로,
float
,
double
및
long
double
각각에 대해 정밀도 손실 없이 표현 가능
(매크로 상수) |
|
FLT_MIN_EXP
DBL_MIN_EXP
LDBL_MIN_EXP
|
해당 정수보다 1 작은 수만큼
FLT_RADIX
를 거듭제곱한 값이 정규화된
float
,
double
및
long
double
가 되는 최소 음수 정수
(매크로 상수) |
|
FLT_MIN_10_EXP
DBL_MIN_10_EXP
LDBL_MIN_10_EXP
|
해당 거듭제곱으로 올린
10
이 정규화된
float
,
double
및
long
double
이 되는 최소 음의 정수
(매크로 상수) |
|
FLT_MAX_EXP
DBL_MAX_EXP
LDBL_MAX_EXP
|
해당 정수보다 1 작은 수만큼 거듭제곱된
FLT_RADIX
가 표현 가능한 유한
float
,
double
및
long
double
값이 되는 최대 양의 정수
(매크로 상수) |
|
FLT_MAX_10_EXP
DBL_MAX_10_EXP
LDBL_MAX_10_EXP
|
해당 거듭제곱으로 올린
10
이 표현 가능한 유한
float
,
double
및
long
double
값이 되는 최대 양의 정수
(매크로 상수) |
|
부동 소수점 연산의 기본 반올림 모드
(매크로 상수) |
|
|
(C++11)
|
모든 산술 연산이 수행되는 정밀도를 지정함
(매크로 상수) |
|
FLT_HAS_SUBNORM
DBL_HAS_SUBNORM
LDBL_HAS_SUBNORM
(C++17)
|
해당 타입이 서브노멀(
비정규
) 숫자를 지원하는지 지정:
- 1 – 결정 불가, 0 – 없음, 1 – 있음 (매크로 상수) |
예제
#include <cfloat> #include <iomanip> #include <iostream> int main() { int w = 16; std::cout << std::left; // std::cout << std::setprecision(53); # define COUT(x) std::cout << std::setw(w) << #x << " = " << x << '\n' COUT( FLT_RADIX ); COUT( DECIMAL_DIG ); COUT( FLT_DECIMAL_DIG ); COUT( DBL_DECIMAL_DIG ); COUT( LDBL_DECIMAL_DIG ); COUT( FLT_MIN ); COUT( DBL_MIN ); COUT( LDBL_MIN ); COUT( FLT_TRUE_MIN ); COUT( DBL_TRUE_MIN ); COUT( LDBL_TRUE_MIN ); COUT( FLT_MAX ); COUT( DBL_MAX ); COUT( LDBL_MAX ); COUT( FLT_EPSILON ); COUT( DBL_EPSILON ); COUT( LDBL_EPSILON ); COUT( FLT_DIG ); COUT( DBL_DIG ); COUT( LDBL_DIG ); COUT( FLT_MANT_DIG ); COUT( DBL_MANT_DIG ); COUT( LDBL_MANT_DIG ); COUT( FLT_MIN_EXP ); COUT( DBL_MIN_EXP ); COUT( LDBL_MIN_EXP ); COUT( FLT_MIN_10_EXP ); COUT( DBL_MIN_10_EXP ); COUT( LDBL_MIN_10_EXP ); COUT( FLT_MAX_EXP ); COUT( DBL_MAX_EXP ); COUT( LDBL_MAX_EXP ); COUT( FLT_MAX_10_EXP ); COUT( DBL_MAX_10_EXP ); COUT( LDBL_MAX_10_EXP ); COUT( FLT_ROUNDS ); COUT( FLT_EVAL_METHOD ); COUT( FLT_HAS_SUBNORM ); COUT( DBL_HAS_SUBNORM ); COUT( LDBL_HAS_SUBNORM ); }
가능한 출력:
FLT_RADIX = 2 DECIMAL_DIG = 21 FLT_DECIMAL_DIG = 9 DBL_DECIMAL_DIG = 17 LDBL_DECIMAL_DIG = 21 FLT_MIN = 1.17549e-38 DBL_MIN = 2.22507e-308 LDBL_MIN = 3.3621e-4932 FLT_TRUE_MIN = 1.4013e-45 DBL_TRUE_MIN = 4.94066e-324 LDBL_TRUE_MIN = 3.6452e-4951 FLT_MAX = 3.40282e+38 DBL_MAX = 1.79769e+308 LDBL_MAX = 1.18973e+4932 FLT_EPSILON = 1.19209e-07 DBL_EPSILON = 2.22045e-16 LDBL_EPSILON = 1.0842e-19 FLT_DIG = 6 DBL_DIG = 15 LDBL_DIG = 18 FLT_MANT_DIG = 24 DBL_MANT_DIG = 53 LDBL_MANT_DIG = 64 FLT_MIN_EXP = -125 DBL_MIN_EXP = -1021 LDBL_MIN_EXP = -16381 FLT_MIN_10_EXP = -37 DBL_MIN_10_EXP = -307 LDBL_MIN_10_EXP = -4931 FLT_MAX_EXP = 128 DBL_MAX_EXP = 1024 LDBL_MAX_EXP = 16384 FLT_MAX_10_EXP = 38 DBL_MAX_10_EXP = 308 LDBL_MAX_10_EXP = 4932 FLT_ROUNDS = 1 FLT_EVAL_METHOD = 0 FLT_HAS_SUBNORM = 1 DBL_HAS_SUBNORM = 1 LDBL_HAS_SUBNORM = 1
결함 보고서
다음 동작 변경 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 416 | C++98 |
<climits>
에 있는 매크로들의 타입이
참조하는 타입과 일치하는지 보장되는지 불분명했음 (C++는 C를 참조하며, C는 보장하지 않음) |
보장되지 않음으로
명확히 함 |
참고 항목
|
C 문서
참조:
Numeric limits
|