Namespaces
Variants

C numeric limits interface

From cppreference.net
Utilities library

참고 항목 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 값이 되는 최대 양의 정수
(매크로 상수)
부동 소수점 연산의 기본 반올림 모드
(매크로 상수)
모든 산술 연산이 수행되는 정밀도를 지정함
(매크로 상수)
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