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또는 0, 유형에 따라 다릅니다.

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

정규화 된 부동 소수점 숫자 를 생성하기 위해 기수를 올린 최소 음의 정수 값 (min_exponent-1)입니다.

에 해당 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

표현 가능한 유한 부동 소수점 수 를 생성하기 위해 기수를 올린 최대 정수 값 (max_exponent-1)입니다.

에 해당 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 ()

비정규 화 된 양의 최소 값.

비정규 화 된 값을 허용하지 않는 유형을위한 것입니다 : min().

is_iec559 bool

true 유형이 IEC-559 / IEEE-754 표준을 준수하는 경우.

IEC-559 유형은 항상 has_infinity, has_quiet_NaNhas_signaling_NaN로 설정 true; 과무한대, quiet_NaNsignalling_NaN 0이 아닌 값을 반환합니다.

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;
};