Namespaces
Variants

std::numeric_limits

cppreference.net에서 가져옴
 
 
유틸리티 라이브러리
일반 유틸리티
관계 연산자 (C++20에서 더 이상 사용되지 않음)
정수 비교 함수
(C++20)(C++20)(C++20)    
(C++20)
교체 및 타입 연산
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
공통 어휘 타입
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
 
헤더 <limits>
template< class T > class numeric_limits;

에 정의됨std::numeric_limits 클래스 템플릿은 산술 타입의 다양한 속성을 질의하는 표준화된 방법을 제공합니다 (예: int 타입에 대해 가능한 가장 큰 값은 std::numeric_limits<int>::max()입니다).

이 정보는 std::numeric_limits 템플릿의 특수화를 통해 제공됩니다. 표준 라이브러리는 모든 산술 타입에 대한 특수화를 제공합니다 (cv-한정되지 않은 산술 타입에 대한 특수화만 나열합니다):

헤더 <limits>
template<> class numeric_limits<bool>;
template<> class numeric_limits<char>;
template<> class numeric_limits<signed char>;
template<> class numeric_limits<unsigned char>;
template<> class numeric_limits<wchar_t>;
template<> class numeric_limits<char8_t>;
(C++20부터)
template<> class numeric_limits<char16_t>;
(C++11부터)
template<> class numeric_limits<char32_t>;
(C++11부터)
template<> class numeric_limits<short>;
template<> class numeric_limits<unsigned short>;
template<> class numeric_limits<int>;
template<> class numeric_limits<unsigned int>;
template<> class numeric_limits<long>;
template<> class numeric_limits<unsigned long>;
template<> class numeric_limits<long long>;
(C++11부터)
template<> class numeric_limits<unsigned long long>;
(C++11부터)
template<> class numeric_limits<float>;
template<> class numeric_limits<double>;
template<> class numeric_limits<long double>;

cv-한정 타입 std::numeric_limitscv에 대한 T 특수화의 각 멤버 값은 한정되지 않은 타입 T에 대한 특수화의 해당 멤버 값과 같습니다. 예를 들어, std::numeric_limits<int>::digits은 std::numeric_limits<const int>::digits과 같습니다.

산술 타입의 별칭 (예: std::size_t 또는 std::streamsize)도 std::numeric_limits 타입 특성으로 검사할 수 있습니다.

비산술 표준 타입 (예: std::complex<T> 또는 std::nullptr_t)에는 특수화가 없습니다.

구현에서 정수 클래스 타입을 정의하는 경우 이러한 타입에 대해서도 std::numeric_limits의 특수화를 제공해야 합니다.

(C++20부터)

구현은 구현별 타입에 대해 std::numeric_limits의 특수화를 제공할 수 있습니다: 예를 들어 GCC는 std::numeric_limits<__int128>를 제공합니다. 비표준 라이브러리는 라이브러리 제공 타입에 대해 특수화를 추가할 수 있습니다. 예를 들어 OpenEXR은 16비트 부동 소수점 타입에 대해 std::numeric_limits<half>를 제공합니다.

템플릿 매개변수

T - 수치 속성을 검색할 타입

멤버 상수

std::numeric_limits 가 특수화된 타입들을 식별함
(public static member constant)
[static]
부호 있는 타입을 식별함
(public static member constant)
[static]
정수형 타입을 식별함
(public static member constant)
[static]
정확한 타입을 식별합니다
(public static member constant)
"양의 무한대" 특수 값을 표현할 수 있는 부동소수점 타입을 식별함
(public static member constant)
부동 소수점 타입이 특수 값 "quiet not-a-number"(NaN)을 표현할 수 있는지 식별합니다
(public static member constant)
부동소수점 타입이 특수 값 "신호 전달 NaN(Not-a-Number)"을 표현할 수 있는지 식별합니다
(public static member constant)
[static]
부동소수점 타입이 사용하는 비정규화(denormalization) 스타일을 식별합니다
(public static member constant)
정밀도 손실을 부정확한 결과가 아닌 비정규화 손실로 감지하는 부동소수점 타입을 식별합니다
(public static member constant)
[static]
해당 타입이 사용하는 반올림 스타일을 식별합니다
(public static member constant)
[static]
IEC 559/IEEE 754 부동소수점 타입을 식별합니다
(public static member constant)
[static]
유한한 값들의 집합을 나타내는 타입들을 식별합니다
(public static member constant)
[static]
모듈로 연산으로 오버플로우를 처리하는 타입을 식별합니다
(public static member constant)
[static]
변경 없이 표현 가능한 radix 자릿수
(public static member constant)
[static]
변경 없이 표현할 수 있는 십진수 자릿수
(public static member constant)
[static] (C++11)
이 타입의 모든 값을 구별하는 데 필요한 십진수 자릿수
(public static member constant)
[static]
주어진 타입의 표현에 사용되는 기수 또는 정수 베이스
(public static member constant)
기수의 유효한 정규화된 부동 소수점 값인 가장 작은 음의 거듭제곱보다 1 더 큰 값
(public static member constant)
유효한 정규화된 부동소수점 값인 10의 가장 작은 음의 지수
(public static member constant)
유효한 유한 부동소수점 값인 기수의 가장 큰 정수 거듭제곱보다 1 큰 값
(public static member constant)
유효한 유한 부동소수점 값인 10의 가장 큰 정수 거듭제곱
(public static member constant)
[static]
산술 연산이 트랩(trap)을 발생시킬 수 있는 타입들을 식별합니다
(public static member constant)
반올림 전에 아주 작은 값을 감지하는 부동소수점 타입을 식별합니다
(public static member constant)

멤버 함수

[static]
주어진 비부동소수점 타입의 가장 작은 유한값, 또는 주어진 부동소수점 타입의 가장 작은 양의 정규값을 반환합니다
(public static member function)
[static] (C++11)
주어진 타입의 가장 낮은 유한값을 반환합니다. 즉, 부호 있는 타입의 경우 가장 음의 값, ​ 0 ​ 부호 없는 타입의 경우 0입니다
(public static member function)
[static]
주어진 타입의 가장 큰 유한값을 반환합니다
(public static member function)
[static]
1.0 과 주어진 부동소수점 타입의 다음 표현 가능한 값 사이의 차이를 반환합니다
(public static member function)
[static]
주어진 부동소수점 타입의 최대 반올림 오차를 반환합니다
(public static member function)
[static]
주어진 부동소수점 타입의 양의 무한대 값을 반환합니다
(public static member function)
[static]
주어진 부동소수점 타입의 quiet NaN 값을 반환합니다
(public static member function)
주어진 부동소수점 타입의 signaling NaN 값을 반환합니다
(public static member function)
[static]
주어진 부동소수점 타입의 가장 작은 양의 비정규값을 반환합니다
(public static member function)

헬퍼 클래스

부동소수점 반올림 모드를 나타냄
(enum)
부동소수점 비정규화 모드를 나타냄
(enum)

C 라이브러리 매크로 상수와의 관계

**번역 결과:** - HTML 태그와 속성은 그대로 유지됨 - ` `, `
`, `` 태그 내부 텍스트는 번역되지 않음 (해당 태그는 없지만 동일한 원칙 적용)
- C++ 관련 용어(bool, false, true)는 번역되지 않음
- 숫자 값(2)은 그대로 유지됨
- 모든 형식과 구조가 원본과 동일하게 보존됨
이 HTML 테이블 행은 C++ 코드 조각을 나타내며, bool 타입과 해당 값들(false, false, true) 그리고 숫자 값 2를 표시하고 있습니다.
특수화
std::numeric_limits<T>
여기서 T 는
멤버
min() lowest()
(C++11)
max() radix
bool false false true 2
char CHAR_MIN CHAR_MIN CHAR_MAX 2
signed char SCHAR_MIN SCHAR_MIN SCHAR_MAX 2
unsigned char ​ 0 ​ ​ 0 ​ UCHAR_MAX 2
wchar_t WCHAR_MIN WCHAR_MIN WCHAR_MAX 2
char8_t ​ 0 ​ ​ 0 ​ UCHAR_MAX 2
char16_t ​ 0 ​ ​ 0 ​ UINT_LEAST16_MAX 2
char32_t ​ 0 ​ ​ 0 ​ UINT_LEAST32_MAX 2
short SHRT_MIN SHRT_MIN SHRT_MAX 2
signed short
unsigned short ​ 0 ​ ​ 0 ​ USHRT_MAX 2
int INT_MIN INT_MIN INT_MAX 2
signed int
unsigned int ​ 0 ​ ​ 0 ​ UINT_MAX 2
long LONG_MIN LONG_MIN LONG_MAX 2
signed long
unsigned long ​ 0 ​ ​ 0 ​ ULONG_MAX 2
long long LLONG_MIN LLONG_MIN LLONG_MAX 2
signed long long
unsigned long long ​ 0 ​ ​ 0 ​ ULLONG_MAX 2
전문화
std::numeric_limits<T>
여기서 T 는
멤버
denorm_min() min() lowest()
(C++11)
max() epsilon() digits digits10
float FLT_TRUE_MIN FLT_MIN - FLT_MAX FLT_MAX FLT_EPSILON FLT_MANT_DIG FLT_DIG
double DBL_TRUE_MIN DBL_MIN - DBL_MAX DBL_MAX DBL_EPSILON DBL_MANT_DIG DBL_DIG
long double LDBL_TRUE_MIN LDBL_MIN - LDBL_MAX LDBL_MAX LDBL_EPSILON LDBL_MANT_DIG LDBL_DIG
특수화
std::numeric_limits<T>
여기서 T 는
멤버 (계속)
min_exponent min_exponent10 max_exponent max_exponent10 radix
float FLT_MIN_EXP FLT_MIN_10_EXP FLT_MAX_EXP FLT_MAX_10_EXP FLT_RADIX
double DBL_MIN_EXP DBL_MIN_10_EXP DBL_MAX_EXP DBL_MAX_10_EXP FLT_RADIX
long double LDBL_MIN_EXP LDBL_MIN_10_EXP LDBL_MAX_EXP LDBL_MAX_10_EXP FLT_RADIX

예제

#include <iostream>
#include <limits>
int main() 
{
    std::cout << "type\t│ lowest()\t│ min()\t\t│ max()\n"
              << "bool\t│ "
              << std::numeric_limits<bool>::lowest() << "\t\t│ "
              << std::numeric_limits<bool>::min() << "\t\t│ "
              << std::numeric_limits<bool>::max() << '\n'
              << "uchar\t│ "
              << +std::numeric_limits<unsigned char>::lowest() << "\t\t│ "
              << +std::numeric_limits<unsigned char>::min() << "\t\t│ "
              << +std::numeric_limits<unsigned char>::max() << '\n'
              << "int\t│ "
              << std::numeric_limits<int>::lowest() << "\t│ "
              << std::numeric_limits<int>::min() << "\t│ "
              << std::numeric_limits<int>::max() << '\n'
              << "float\t│ "
              << std::numeric_limits<float>::lowest() << "\t│ "
              << std::numeric_limits<float>::min() << "\t│ "
              << std::numeric_limits<float>::max() << '\n'
              << "double\t│ "
              << std::numeric_limits<double>::lowest() << "\t│ "
              << std::numeric_limits<double>::min() << "\t│ "
              << std::numeric_limits<double>::max() << '\n';
}

가능한 출력:

type	│ lowest()	│ min()		│ max()
bool	│ 0		│ 0		│ 1
uchar	│ 0		│ 0		│ 255
int	│ -2147483648	│ -2147483648	│ 2147483647
float	│ -3.40282e+38	│ 1.17549e-38	│ 3.40282e+38
double	│ -1.79769e+308	│ 2.22507e-308	│ 1.79769e+308

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 201 C++98 모든 기본 타입에 대한 특수화가 제공되어야 함 비-산술 타입은 제외됨
LWG 559 C++98 cv-한정 타입에 대한 std::numeric_limits
특수화가 cv-비한정 타입에 대한 해당 특수화와
동일하게 동작하는지 불분명했음
동일한
동작을 가짐

참고 항목