C ++ 라이브러리-<제한>
소개
이것은 숫자 제한 유형이며 라이브러리가 컴파일되는 특정 플랫폼에서 산술 유형 (정수 또는 부동 소수점)의 속성에 대한 정보를 제공합니다.
선언
다음은 std :: numeric_limits에 대한 선언입니다.
template <class T> numeric_limits;
C ++ 11
template <class T> numeric_limits;
매개 변수
T − 클래스 유형입니다.
예
std :: numeric_limits에 대한 아래 예에서.
#include <limits>
#include <iostream>
int main() {
std::cout << "type\tlowest type\thighest type\n";
std::cout << "int\t"
<< std::numeric_limits<int>::lowest() << '\t'
<< std::numeric_limits<int>::max() << '\n';
std::cout << "float\t"
<< std::numeric_limits<float>::lowest() << '\t'
<< std::numeric_limits<float>::max() << '\n';
std::cout << "double\t"
<< std::numeric_limits<double>::lowest() << '\t'
<< std::numeric_limits<double>::max() << '\n';
}
샘플 출력은 다음과 같아야합니다.
type lowest type highest type
int -2147483648 2147483647
float -3.40282e+38 3.40282e+38
double -1.79769e+308 1.79769e+308
템플릿 인스턴스화
C ++ 98의 기본적인 산술 유형은 다음과 같아야합니다.
기본적인 산술 유형 | |
---|---|
일체형 | bool |
char |
|
wchar_t |
|
signed char |
|
short int |
|
int |
|
long int |
|
unsigned char |
|
unsigned short int |
|
unsigned int |
|
unsigned long int |
|
부동 소수점 유형 | float |
double |
|
long double |
C ++ 11의 기본적인 산술 유형은 다음과 같아야합니다.
기본적인 산술 유형 | |
---|---|
일체형 | bool |
char |
|
char16_t |
|
char32_t |
|
wchar_t |
|
signed char |
|
short int |
|
int |
|
long int |
|
long long int |
|
unsigned char |
|
unsigned short int |
|
unsigned int |
|
unsigned long int |
|
unsigned long long int |
|
부동 소수점 유형 | float |
double |
|
long double |
회원
회원 | 유형 | 특성 |
---|---|---|
is_specialized | bool |
true 모두 를 위한 것입니다 (즉,numeric_limits전문화되어 있습니다). 그리고 false 다른 모든 유형의 경우. |
min () | 티 | 최소 유한 값입니다. 비정규 화 (지수 비트의 가변 수)가있는 부동 유형의 경우 : 최소 양의 정규화 값. 에 해당 CHAR_MIN, SCHAR_MIN, SHRT_MIN, INT_MIN, LONG_MIN, LLONG_MIN, FLT_MIN, BL_MIN, LDBL_MIN또는 |
max () | 티 | 최대 유한 값입니다. 에 해당 CHAR_MAX, SCHAR_MAX, UCHAR_MAX, SHRT_MAX, USHRT_MAX, INT_MAX, UINT_MAX, LONG_MAX, ULONG_MAX, LLONG_MAX, ULLONG_MAX, UINT_LEAST16_MAX, UINT_LEAST32_MAX, FLT_MAX, DBL_MAX 또는 LDBL_MAX, 유형에 따라 다릅니다. |
최저 () | 티 | 최소 유한 값입니다. (C ++ 11부터) 정수 유형의 경우 : 동일 min (). 부동 소수점 유형의 경우 : 구현에 따라 다릅니다. 일반적으로 부정적인max (). |
숫자 | int | 정수 유형 : 표현의 비 부호 비트 수 ( 기수 기본 자릿수)입니다. 부동 유형의 경우 : 가수 의 자릿수 ( 기수 기준) (다음과 동일)FLT_MANT_DIG, DBL_MANT_DIG 또는 LDBL_MANT_DIG). |
숫자 10 | int |
변경없이 표현할 수있는 자릿수 (십진수 기준)입니다. 에 해당 FLT_DIG, DBL_DIG 또는 LDBL_DIG 부동 유형의 경우. |
max_digits10 | int |
다른 값이 항상 구별되도록하는 데 필요한 숫자 (십진수 기준)입니다. |
is_signed | bool |
true 유형이 서명 된 경우. |
is_integer | bool |
true 유형이 정수인 경우. |
is_exact | bool |
true 유형이 정확한 표현을 사용하는 경우. |
어근 | int |
정수 유형 : 표현의 기본입니다. 부동 유형의 경우 : 표현 지수의 밑 (다음과 동일) FLT_RADIX). |
엡실론 () | 티 | 기계 입실론 (1과 1보다 큰 최소값의 차이)입니다. 에 해당 FLT_EPSILON, DBL_EPSILON 또는 LDBL_EPSILON 부동 유형의 경우. |
round_error () | 티 | 최대 반올림 오류를 측정합니다. |
min_exponent | int |
정규화 된 부동 소수점 숫자 를 생성하기 위해 기수를 올린 최소 음의 정수 값 에 해당 FLT_MIN_EXP, DBL_MIN_EXP 또는 LDBL_MIN_EXP 부동 유형의 경우. |
min_exponent10 | int |
10을 제곱하여 정규화 된 부동 소수점 숫자를 생성하는 최소 음의 정수 값입니다. 에 해당 FLT_MIN_10_EXP, DBL_MIN_10_EXP 또는 LDBL_MIN_10_EXP 부동 유형의 경우. |
max_exponent | int |
표현 가능한 유한 부동 소수점 수 를 생성하기 위해 기수를 올린 최대 정수 값 에 해당 FLT_MAX_EXP, DBL_MAX_EXP 또는 LDBL_MAX_EXP 부동 유형의 경우. |
max_exponent10 | int |
10을 제곱하여 정규화 된 유한 부동 소수점 수를 생성하는 최대 정수 값입니다. 에 해당 FLT_MAX_10_EXP, DBL_MAX_10_EXP 또는 LDBL_MAX_10_EXP 부동 유형의 경우. |
has_infinity | bool |
true 유형에 양의 무한대에 대한 표현이있는 경우. |
has_quiet_NaN | bool |
true 유형에 조용한 (비 시그널링) "Not-a-Number"에 대한 표현이있는 경우. |
has_signaling_NaN | bool |
true 유형에 "Not-a-Number"신호에 대한 표현이있는 경우. |
has_denorm | float_denorm_style | 비정규 화 된 값 (지수 비트 수가 가변적 인 표현)입니다. 유형은 다음 열거 형 값 중 하나를 가질 수 있습니다. denorm_absent, 비정규 화 된 값을 허용하지 않는 경우. denorm_present, 비정규 화 된 값을 허용하는 경우. denorm_indeterminate, 컴파일 타임에 불확실한 경우. |
has_denorm_loss | bool |
true 경우 정확도의 손실을 역 정규화 손실보다는 부정확 한 결과로서 검출된다. |
무한대() | 티 | 가능한 경우 양의 무한대를 나타냅니다 . |
quiet_NaN () | 티 | 가능한 경우 조용한 (비 신호) "Not-a-Number"를 나타냅니다 . |
signalling_NaN () | 티 | 가능한 경우 "Not-a-Number"신호를 나타냅니다 . |
denorm_min () | 티 | 비정규 화 된 양의 최소 값. 비정규 화 된 값을 허용하지 않는 유형을위한 것입니다 : |
is_iec559 | bool |
IEC-559 유형은 항상 has_infinity, has_quiet_NaN 과 has_signaling_NaN로 설정 |
is_bounded | bool |
true 유형이 나타내는 값 세트가 유한 한 경우. |
is_modulo | bool |
true 유형이 모듈로 인 경우. 두 개의 양수를 더할 수 있고 결과가 더 작은 세 번째 숫자로 래핑되는 경우 유형은 모듈로 입니다. |
트랩 | bool |
true 유형에 대해 트래핑이 구현 된 경우. |
작음 _ 전 | bool |
true 반올림하기 전에 작은 것이 감지되면. |
round_style | float_round_style | 반올림 스타일입니다. 유형은 다음 열거 형 값 중 하나를 가질 수 있습니다. round_toward_zero, 0으로 반올림하는 경우. round_to_nearest, 가장 가까운 표현 가능한 값으로 반올림하는 경우. round_toward_infinity, 무한대로 반올림하는 경우. round_toward_neg_infinity, 음의 무한대로 반올림되는 경우. round_indeterminate, 컴파일 타임에 반올림 스타일을 결정할 수없는 경우. |
기본 산술 유형이 아닌 위의 모든 유형에 대해 기본 템플릿 정의가 사용됩니다.
C ++ 98
template <class T> class numeric_limits {
public:
static const bool is_specialized = false;
static T min() throw();
static T max() throw();
static const int digits = 0;
static const int digits10 = 0;
static const bool is_signed = false;
static const bool is_integer = false;
static const bool is_exact = false;
static const int radix = 0;
static T epsilon() throw();
static T round_error() throw();
static const int min_exponent = 0;
static const int min_exponent10 = 0;
static const int max_exponent = 0;
static const int max_exponent10 = 0;
static const bool has_infinity = false;
static const bool has_quiet_NaN = false;
static const bool has_signaling_NaN = false;
static const float_denorm_style has_denorm = denorm_absent;
static const bool has_denorm_loss = false;
static T infinity() throw();
static T quiet_NaN() throw();
static T signaling_NaN() throw();
static T denorm_min() throw();
static const bool is_iec559 = false;
static const bool is_bounded = false;
static const bool is_modulo = false;
static const bool traps = false;
static const bool tinyness_before = false;
static const float_round_style round_style = round_toward_zero;
};
C ++ 11
template <class T> class numeric_limits {
public:
static constexpr bool is_specialized = false;
static constexpr T min() noexcept { return T(); }
static constexpr T max() noexcept { return T(); }
static constexpr T lowest() noexcept { return T(); }
static constexpr int digits = 0;
static constexpr int digits10 = 0;
static constexpr bool is_signed = false;
static constexpr bool is_integer = false;
static constexpr bool is_exact = false;
static constexpr int radix = 0;
static constexpr T epsilon() noexcept { return T(); }
static constexpr T round_error() noexcept { return T(); }
static constexpr int min_exponent = 0;
static constexpr int min_exponent10 = 0;
static constexpr int max_exponent = 0;
static constexpr int max_exponent10 = 0;
static constexpr bool has_infinity = false;
static constexpr bool has_quiet_NaN = false;
static constexpr bool has_signaling_NaN = false;
static constexpr float_denorm_style has_denorm = denorm_absent;
static constexpr bool has_denorm_loss = false;
static constexpr T infinity() noexcept { return T(); }
static constexpr T quiet_NaN() noexcept { return T(); }
static constexpr T signaling_NaN() noexcept { return T(); }
static constexpr T denorm_min() noexcept { return T(); }
static constexpr bool is_iec559 = false;
static constexpr bool is_bounded = false;
static constexpr bool is_modulo = false;
static constexpr bool traps = false;
static constexpr bool tinyness_before = false;
};