|
Программирование >> Операторы преобразования типа
return 0.5F: static const int niin exponent = -125: static const int max exponent = +126: static const int ni1n exponentlO = -37; static const int niax exponentlO = +38; static const bool hasjnfinity = true; Inline static float InfinityO throwO ( return . ; } static const bool has quiet NaN = true; inline static float quiet NaNO throwO { return ...; } static const bool has signaling NaN = true; inline static float signaling NaNC) throwO { return ...; } static const float denorm style hasjenorm = denorm absent; static const bool has denormJoss = false; inline static float denorm m1nO throwO { return mln(); } static const bool traps = true; static const bool tinyness before = true; Обратите внимание: все переменные класса объявлены статическими и константными, чтобы их значения могли определяться на стадии компиляции. В некоторых реализациях значения, возвращаемые функциями, не удается определить на стадии компиляции. Например, при выполнении кода на разных процессорах вещественные числа могут иметь разные значения. Значения round styte перечислены в табл. 4.3, а значения has denorm - в табл. 4.4. К сожалению, переменная has denorm не называется denorm style, что выглядело бы более логично. Это произошло из-за того, что на поздней стадии стандартизации логический тип был заменен перечисляемым. Тем не менее переменная has denorm может использоваться в логическом контексте, потому что в соответствии со стандартом значение denorm absent равно О (эквивалент false), а denorm present и denormjndeterminate равны соответственно 1 и -1 (оба значения эквивалентны true). Следовательно, has denorm может интерпретироваться как логический признак, указывающий, допускает ли данный тип денормализо-ванные значения. Таблица 4.3. Стили округления в numericjimitso Стнль Описание
Пример использования класса numericjimits Следующий пример демонстрирует использование числовых пределов. Он выводит максимальные возможные значения некоторых типов, а также проверяет, является ли тип char знаковым, ut1l/l1mltsl,cpp #1nclude <lostneani> #include <limits> Iinclude <stning> using namespace std; int mainC) { Использование текстового представления для bool cout boolalpha; Вывод максимальных значений для целочисленных типов cout max(short): numeric limits<short>::max() endl; cout max(int): numeric limits<int>::max() endl; cout maxdong): numenicj imits<long>: ;max() endl: cout endl; Вывод максимальных значений для вещественных типов cout max(float): numericJirnits<float>::max() end]; cout max(double): numeric limits<double>::max() endl; cout maxClong double): numericJimit5<long double>::max() endl; cout endl: Проверяем, является ли тип char знаковым, cout is signed(char); numeric limits<char>::is signed endl; cout endl; Проверка наличия числовых пределов у типа string cout is specialized(string): numericjim1ts<string>: :is specialized endl; Вспомогательные функции Библиотека алгоритмов (заголовочный файл <algorithm>) включает три вспомогательные функции. Первые две функции вычисляют минимум и максимум по двум величинам, а третья меняет местами два значения. Вычисление минимума и максимума Функции, вычисляющие минимум и максимум по двум величинам, определяются в заголовочном файле <algorithm>: namespace std { template <class T> inline const T& min (const T& a. const T& b) { return b < a ? b : a: template <class T> inline const T& max (const T& a, const T& b) { return a < b ? b : a; Если значения равны, функции обычно возвращают первый элемент. Тем не менее работа программы не должна зависеть от данного факта - это считается проявлением плохого стиля программирования. Результат выполнена программы зависит от платформы. Один из возможных вариантов выглядит так: max(short): 32767 maxdnt): 2147483647 max(long): 2147483647 max(float): 3.40282e+38 max(double): 1.79769e+308 maxClong double): 1.79769e+308 1s slgned(char): false is specialized(string): false Последняя строка означает, что для типа string числовые пределы не поддерживаются. Впрочем, это вполне логично, поскольку строки не являются числовыми величинами. Однако приведенный пример наглядно показывает, что программист может обратиться с запросом к любому типу и узнать, поддерживает ли он числовые пределы.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |