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