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

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, которые возвращают наименьшее и наибольшее значения для типа переданного им параметра.