числовые ограничения функции-члены lowest и min

numeric_limits<T>::min();
numeric_limits<T>::lowest();

чем отличается значение, возвращаемое обеими функциями?

3 ответов


В пункте 18.3.2.4 стандарта C++11 указывается:

static constexpr T min() noexcept;

1 Минимальное конечное значение.

2 для плавающих типов с денормализацией возвращает минимальное положительное нормализованное значение.

3 значимый для всех специализаций

[...]

static constexpr T lowest() noexcept;

6 конечное значение x такое, что нет другого конечного значения y, где y

7 Значимый для всех специализаций, в которых is_bounded != ложный.

сноска 197 затем добавляет соответствующее замечание:

lowest() необходимо, потому что не все представления с плавающей запятой имеют наименьшее (самое отрицательное) значение, которое является отрицательное наибольшего (наиболее положительного) конечного значения.


для типов с плавающей точкой min возвращает наименьшее конечное число > 0 представимо в типе (т. е. число, имеющее наименьшее абсолютное значение != 0), а lowest возвращает наименьшее конечное число, которое можно представить (т. е. отрицательное число максимального абсолютного значения, которое меньше -infinity).


Если вы проверяете ссылку на эти функции, например этот min и этот lowest вы можете видеть, что есть некоторые ценности, которые отличаются.