numeric_limits<T>::min();
numeric_limits<T>::lowest();
Какая разница между значением, возвращаемым обеими функциями?numeric_limits самые низкие и минимальные функции-члены
numeric_limits<T>::min();
numeric_limits<T>::lowest();
Какая разница между значением, возвращаемым обеими функциями?numeric_limits самые низкие и минимальные функции-члены
Пункт 18.3.2.4 из C++ 11 стандарт устанавливает:
static constexpr T min() noexcept
;1 Минимальное конечное значение.
2 Для плавающих типов с денормализацией возвращает минимальное положительное нормализованное значение.
3 Значимое для всех специализаций
[...]
static constexpr T lowest() noexcept
;6 Конечное значение x, для которого нет другого конечного значения y, где y < x.
7 Значение для всех специализаций, в которых is_bounded! = False.
Сноска 197 добавляет соответствующее замечание:
lowest()
необходимо потому, что не все с плавающей точкой представления имеют наименьший (наиболее отрицательное) значение, которое является отрицательное из крупнейших (самый позитивный) конечное значение.
Если вы проверите ссылку на эти функции, например. this one for min
и this one for lowest
вы можете видеть, что существуют некоторые значения, которые отличаются.
Для плавающих типов min
возвращает наименьшее конечное число, которое > 0
представима в типа (то есть число, имеющее самое низкое абсолютное значение != 0
), тогда как lowest
возвращает наименьшее конечное число, что представима (то есть отрицательное число максимальных абсолютных значение меньше -infinity
).
Наименьшее число, которое является представимым, является отрицательной бесконечностью; 'lower' дают наименьшее ** конечное ** представимое значение. –
Отредактировано, спасибо за комментарий. – filmor
+1 для точной цитаты из стандарта менее чем за 5 минут. – Morwenn
в другом слове 'lower' возвращает что-то вроде дополнения 2s для максимального положительного целого числа. –
@Muhammadalaa: для целых типов нет разницы между 'min()' и 'lower()'. –