Библиотека 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для всех остальных типов.
мин () Т

Это минимальное конечное значение.

Для типов с плавающей запятой с денормализацией (переменное количество разрядов экспоненты): минимальное положительное нормализованное значение.

Эквивалентно CHAR_MIN, SCHAR_MIN, SHRT_MIN, INT_MIN, LONG_MIN, LLONG_MIN, FLT_MIN, BL_MIN, LDBL_MINили 0, в зависимости от типа.

Максимум() Т

Это максимальное конечное значение.

Эквивалентно 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)

Для целочисленных типов: то же, что и мин ().

Для типов с плавающей запятой: зависит от реализации; как правило, отрицательныйМаксимум().

цифры 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» , если доступно.
signaling_NaN () Т Он представляет собой сигнализацию «Not-a-Number» , если таковая имеется.
denorm_min () Т

Минимальное положительное денормализованное значение.

Это для типов, не допускающих денормализованных значений: то же, что и min().

is_iec559 bool

true если тип соответствует стандарту IEC-559 / IEEE-754.

Тип IEC-559 всегда имеет has_infinity, has_quiet_NaN а также has_signaling_NaNустановлен на true; А такжебесконечность, quiet_NaN а также signaling_NaN вернуть какое-то ненулевое значение.

is_bounded bool true если набор значений, представленных типом, конечно.
is_modulo bool trueесли тип по модулю. Тип - по модулю, если можно сложить два положительных числа и получить результат, который будет завершен до третьего числа, которое меньше.
ловушки bool true если для типа реализован треппинг.
tinyness_before bool true если крошечность обнаружена до округления.
round_style float_round_style

Это округлый стиль. Тип может иметь любое из следующих значений перечисления -

round_toward_zero, если округляется до нуля.

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