Логически говоря, учитывая природу значений с плавающей запятой, максимальные и минимальные представляемые значения a float
являются соответственно положительной и отрицательной бесконечностью.
Почему же тогда FLT_MAX
и FLT_MIN
не установлены на них? Я понимаю, что это "то, как требовался стандарт". Но тогда , что может использовать FLT_MAX
или FLT_MIN
, поскольку они в настоящее время лежат в середине представленного числового диапазона float
? Другие числовые ограничения имеют некоторую полезность, потому что они дают гарантии относительно сравнений (например, "Нет INT может тестировать больше, чем INT_MAX" ). Без такой гарантии, какими будут эти ограничения на плавание?
Мотивационный пример для С++:
#include <vector>
#include <limits>
template<typename T>
T find_min(const std::vector<T> &vec)
{
T result = std::numeric_limits<T>::max();
for (std::vector<T>::const_iterator p = vec.start() ; p != vec.end() ; ++p)
if (*p < result) result = *p;
return result;
}
Этот код отлично работает, если T является интегральным типом, но не если он является типом с плавающей точкой. Это раздражает. (Да, стандартная библиотека предоставляет min_element
, но это не точка. Точка - это шаблон.)