Шаг 74.
Библиотека STL.
Вспомогательные средства. Класс numeric_limits

    На этом шаге мы рассмотрим класс numeric_limits.

    Обычно шаблоны применяются для реализации некой функциональности в любом типе. Однако шаблоны также могут использоваться для определения общего интерфейса, реализуемого в типах, поддерживающих этот интерфейс. Для этой цели определяются специализированные версии обобщенного шаблона. Ниже показано, как эта методика применяется в шаблоне numeric_limits.

    Обобщенный шаблон numeric_limits и его стандартные специализации содержатся в заголовочном файле <limits>. Заголовок включает специализации для всех базовых типов, представляющих числовые значения: bool, char, signed char, unsigned char, wchar_t, short, unsigned short, int, unsigned int, long, unsigned long, float, double и long double. Кроме того, аналогичные специализации легко определяются для пользовательских числовых типов.

    В таблице 1 перечислены все члены класса numeric_limits<> с краткими описаниями. В правом столбце приводятся соответствующие константы С, определяемые в заголовочных файлах <climits>, <limits.h>, <cfloat> и <float.h>.

Таблица 1. Члены класса numeric_limits<>
Член класса Описание Константы C
is_specialized Тип поддерживает специализацию числовых пределов  
is_slgned Знаковый тип  
is_integer Целочисленный тип  
is_exact Вычисления производятся без ошибок округления (true для всех целочисленных типов)  
is_bounded Тип имеет конечный набор допустимых значений (true для всех встроенных типов)  
is_modulo Поддерживается сложение по модулю (суммирование двух положительных чисел может привести к меньшему результату)  
is_lec559 Тип соответствует стандартам IEC 559 и IEEE 754  
min() Минимальное конечное значение (минимальное нормализованное значение для вещественных типов с денормализацией; имеет смысл, если is_bounded || !is_signed) INT_MIN, FLT_MIN, CHAR_MIN, ...
max() Максимальное конечное значение (имеет смысл, если is_bounded) INT_MAX, FLT_MAX,...
digits Символьные, целочисленные типы - количество незнаковых битов; вещественные типы - количество цифр основания radix в мантиссе CHAR_BIT
digits() Количество десятичных цифр (имеет смысл, если is_bounded) FLT_DIG, ...
radix Целочисленные типы - основание системы счисления, использованной для представления (почти всегда 2); вещественные типы - основание системы счисления, использованной для представления экспоненты FLT_RADIX
min_exponent Минимальный отрицательный целый показатель степени с основанием radix FLT_MIN_EXP, ...
max_exponent Максимальный положительный целый показатель степени с основанием radix FLT_MAX_EXP,...
min_exponent10 Минимальный отрицательный целый показатель степени с основанием 10 FLT_MIN_10_EXP, ...
max_exponent10 Максимальный положительный целый показатель степени с основанием 10 FLT_MAX_10_EXP, ...
epsilon() Разность между 1 и минимальной величиной, большей 1 FLT_EPSILON,...
round_style Стиль округления  
round_error() Оценка максимальной ошибки округления (в соответствии со стандартом ISO/IEC 10967-1)  
has_infinity Признак наличия представления для положительной бесконечности  
infinity() Представление положительной бесконечности (если оно есть)  
has_quiet_NaN Признак наличия пассивного представления NaN ("не число")  
quiet_NaN Пассивное представление NaN  
has_signaling_NaN Признак наличия сигнального представления NaN  
signaling_NaN() Сигнальное представление NaN  
has_denorm Возможность представления денормализованных значений (с переменным количеством битов экспоненты)  
has_denorm_loss Потеря точности обнаруживается как потеря денормализации, а не как неточный результат  
denorm_min() Минимальное положительное денормализованное значение  
traps В типе реализован механизм "ловушек"  
tinyness_before Предельно малые значения обнаруживаются перед округлением  

    На следующем шаге мы закончим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг