Библиотека 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или |
Максимум() | Т | Это максимальное конечное значение. Эквивалентно 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 |
Это минимальное отрицательное целочисленное значение, так что основание системы счисления, возведенное в значение, Эквивалентно 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» , если доступно. |
signaling_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 если для типа реализован треппинг. |
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;
};