numeric_limits c++ c++11 stl standard-library

c++ - numeric_limits funciones de miembro mínimo y mínimo



numeric_limits c++ (3)

El párrafo 18.3.2.4 de la norma C ++ 11 especifica:

static constexpr T min() noexcept ;

1 Valor finito mínimo.

2 Para tipos flotantes con desnormalización, devuelve el valor normalizado positivo mínimo.

3 Significativo para todas las especializaciones.

[...]

static constexpr T lowest() noexcept ;

6 Un valor finito x tal que no hay otro valor finito y donde y <x.

7 Significativo para todas las especializaciones en las que is_bounded! = False.

La nota de pie de página 197 luego agrega el comentario relevante:

lowest() es necesario porque no todas las representaciones de punto flotante tienen un valor más pequeño (más negativo) que es el negativo del valor finito más grande (más positivo).

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

¿Cuál es la diferencia entre el valor devuelto por ambas funciones?


Para los tipos de punto flotante, min devuelve el número finito más pequeño que es > 0 representable en el tipo (es decir, ¡el número que tiene el valor absoluto más bajo != 0 ), mientras que el valor lowest devuelve el número finito más pequeño que se puede representar (es decir, el número negativo del valor absoluto máximo) eso es menos que -infinity ).