Подтвердить что ты не робот

Функции numeric_limits с наименьшим и минимальным членством

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

В чем разница между значением, возвращаемым обеими функциями?

4b9b3361

Ответ 1

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

static constexpr T min() noexcept;

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

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

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

[...]

static constexpr T lowest() noexcept;

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

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

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

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

Ответ 2

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

Ответ 3

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