2010-08-20 30 views
20

Estaba buscando std::numeric_limits<float>::min/max() pero parece que 'min()' devuelve el valor absoluto más pequeño, no el valor más bajo. ¿Es seguro usarObtener el valor mínimo flotante NEGATIVO en C++

-std::numeric_limits<float>::max(), es decir, flotar simétrico en límites mínimos/máximos?

+0

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

+0

el _smallest_ número que puede contener un flotador. Creo que eso es inequívoco, ya que -1 es menor que 0, pero me refiero a "el valor negativo con mayor magnitud" –

+0

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

Respuesta

22

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

+0

Google me trajo aquí. ¡Gracias! :PAG – TravisG

18

uso std :: :: numeric_limits más bajas

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

http://www.cplusplus.com/reference/std/limits/numeric_limits/ - no menciona 'más bajo', es ¿estándar? –

+0

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

+0

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

4

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

Si está utilizando el valor representable más bajo como valor inicial en la búsqueda de una lista para su valor máximo, considere usar infinity en su lugar.

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