числовые ограничения функции-члены 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
вы можете видеть, что есть некоторые ценности, которые отличаются.