Получите минимальное значение NEGATIVE float в С++
Я смотрел на std::numeric_limits<float>::min/max()
, но, похоже, "min()" возвращает наименьшее абсолютное значение, а не самое низкое значение. Безопасно ли использовать
-std::numeric_limits<float>::max()
, т.е. является симметричным по плаванию в пределах min/max?
Ответы
Ответ 1
Числа с плавающей запятой IEEE 754 используют знаковый бит для подписки (а не что-то вроде дополнения twos), поэтому, если вы уверены, что ваш компилятор/платформа использует это представление (очень часто), вы можете использовать -std::numeric_limits<float>::max()
как вы подозревали.
Ответ 2
использовать std:: numeric_limits:: lower()
static _Ty __CRTDECL lowest() _THROW0()
{ // return most negative value
return (-(max)());
}
Ответ 3
Да, float
является симметричным по минимальным/максимальным значениям.
Если вы используете наименьшее представляемое значение в качестве начального значения при поиске списка для его максимального значения, рассмотрите возможность использования бесконечности.
std::numeric_limits<T>::has_infinity()
вернет true
для любого числового типа, который имеет его, а std::numeric_limits<T>::infinity()
вернет значение, которое всегда оценивает больше любого другого значения, отличного от NaN для этого типа. Это значение можно отрицать и будет оценивать меньше всего.