C++. Сборник рецептов.

3.7. Получение минимального и максимального значений числового типа.

Проблема.

Требуется узнать наибольшее и наименьшее значения, представляемые на данной платформе числовым типом, таким как int или double.

Решение.

Чтобы среди прочего получить максимальное и минимальное допустимые значения числового типа, используйте шаблон класса numeric_limits из заголовочного файла <limits> (см. пример 3.9).

Пример 3.9. Получение числовых ограничений.

#include <iostream>

#include <limits>

Using namespace std;

Template<typename T>

Void showMinMax() {

 cout << "min: " << numeric_limits<T>::min() << endl;

 cout << "max: " << numeric_limits<T>::max() << endl;

 cout << endl;

}

Int main() {

 cout << "short:" << endl;

 showMinMax<short>();

 cout << "int:" << endl;

 showMinMax<int>();

 cout << "long:" << endl;

 showMinMax<long>();

 cout << "float:" << endl;

 showMinMax<float>();

 cout << "double:" << endl;

 showMinMax<double>();

 cout << "long double:" << endl;

 showMinMax<long double>();

 cout << "unsigned short:" << endl;

 showMinMax<unsigned short>();

 cout << "unsigned int:" << endl;

 showMinMax<unsigned int>();

 cout << "unsigned long:" << endl;

 showMinMax<unsigned long>();

}

Вот что я получил в Windows XP, используя Visual C++ 7.1.

Short:

Min: -32768.

Max: 32767.

Int:

Min: -2147483648.

Max: 2147483647.

Long:

Min -2147483648.

Max 2147483647.

Float:

Min: 1.17549e-038.

Max: 3.40282e-038.

Double:

Min: 2.22507e-308.

Max: 1.79769e+308.

Long double:

Min: 2.22507e-308.

Max: 1.79769e+308.

Unsigned short:

Min: 0.

Max: 65535.

Unsigned int:

Min: 0.

Max: 4294967295.

Unsigned long:

Min: 0.

Max: 4294967295.

Обсуждение.

Пример 3.9 показывает простой пример получения минимального и максимального значений встроенных числовых типов. Шаблон класса numeric_limits имеет специализации для всех встроенных типов, включая как числовые, так и нечисловые типы. Стандарт требует, чтобы все типы, которые я использовал в примере 3.9, а также перечисленные далее, имели свою специализацию numeric_limits.

Bool.

Char.

Signed char.

Unsigned char.

Wchar_t.

Min и max — это функции-члены numeric_limits типа static, которые возвращают наименьшее и наибольшее значения для типа переданного им параметра.