Obtenga el valor flotante NEGATIVO mínimo en C++

2 minutos de lectura

avatar de usuario
Sr. chico

yo estaba mirando std::numeric_limits<float>::min/max() pero parece que ‘min()’ devuelve el valor absoluto más pequeño, no el más bajo valor. ¿Es seguro de usar?

-std::numeric_limits<float>::max()es decir, ¿el flotador es simétrico en los límites mínimo/máximo?

  • ¿Es el valor mínimo negativo o máximo negativo?

    – Gordito

    20 de agosto de 2010 a las 8:51

  • la pequeñísimo número que puede contener un flotador. creo que es técnicamente inequívoco ya que -1 es menor que 0, pero me refiero a “el valor negativo con mayor magnitud”

    – Sr. chico

    20 de agosto de 2010 a las 8:53

  • Si su compilador garantiza que obtiene números de coma flotante IEEE 754 o una aproximación lo suficientemente buena, entonces el conjunto de flotantes representables es simétrico y puede usar -std::numeric_limits<float>::max()

    – Pascal Cuoq

    20 de agosto de 2010 a las 8:56

Los números de punto flotante IEEE 754 usan un bit de signo para el signo (en lugar de algo como complemento de dos), por lo que si está seguro de que su compilador/plataforma usa esa representación (muy común), entonces puede usar -std::numeric_limits<float>::max() como sospechabas.

  • Google me trajo aquí. ¡Gracias! :PAGS

    – TravisG

    3 de agosto de 2011 a las 19:45

use std::numeric_limits::lowest()

static _Ty __CRTDECL lowest() _THROW0()
    {   // return most negative value
    return (-(max)());
    }

  • cplusplus.com/reference/std/limits/numeric_limits – no menciona lowestes estándar?

    – Sr. chico

    20 de agosto de 2010 a las 8:54

  • @John: Sí en C++0x, no en C++98.

    – kennytm

    20 de agosto de 2010 a las 8:58

  • @KennyTM: Gracias. No tenía ni idea de la parte de C++ 0x de eso.

    – Gordito

    20 de agosto de 2010 a las 8:59

  • @chusbad: No lo he hecho, pero su respuesta es (parcialmente) correcta ya que la versión del estándar no se mencionó en la pregunta 🙂

    – Matthieu M.

    20 de agosto de 2010 a las 9:07

Sí, float es simétrica en valores mínimos/máximos.

Si está utilizando el valor representable más bajo como valor inicial al buscar en una lista su valor máximo, considere usar infinito en su lugar.

std::numeric_limits<T>::has_infinity() regresará true para cualquier tipo numérico que lo tenga y std::numeric_limits<T>::infinity() devolverá un valor que siempre se evalúa como mayor que cualquier otro valor que no sea NaN para ese tipo. Este valor se puede negar y se evaluará menos que cualquier otra cosa.

¿Ha sido útil esta solución?