2010-08-20 12 views
20

Ich schaute auf std::numeric_limits<float>::min/max(), aber es erscheint 'min()' gibt den kleinsten absoluten Wert, nicht die niedrigsten Wert. Ist es sicher,Erhalten Minimum NEGATIV float-Wert in C++

-std::numeric_limits<float>::max() zu verwenden, das heißt float symmetrisch in min/max Grenzen?

+0

Ist es negativer Mindest oder maximaler negativer Wert? – Chubsdad

+0

die kleinste Zahl, die ein Float halten kann. Ich denke, das ist _technically_ eindeutig da -1 kleiner als 0 ist, aber ich meine, „der negativer Wert mit dem größten Betrag“ –

+0

Wenn Ihr Compiler garantiert, dass Sie IEEE erhalten 754 Gleitkommazahlen oder gut genug Annäherung, dann die Menge des darstellbaren Schwimmer symmetrisch ist und können Sie '-std :: numeric_limits :: max()' –

Antwort

22

IEEE 754 Gleitkommazahlen verwenden, um einen Vorzeichenbit für signierte Heit (und nicht so etwas wie Zweier-Komplement), also, wenn Sie sicher sind, dass Ihr Compiler/Plattform verwendet diese Repräsentation (sehr häufig), dann können Sie -std::numeric_limits<float>::max() verwenden, wie Sie vermuteten.

+0

Google hat mich hier hergebracht. Vielen Dank! : P – TravisG

18

Verwendung std :: numeric_limits :: niedrigsten()

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

http://www.cplusplus.com/reference/std/limits/numeric_limits/ - es erwähnt nicht 'lowest', es ist Standard? –

+0

@ John: Ja auf C++ 0x, nein auf C++ 98. – kennytm

+0

@KennyTM: Danke. Ich war ahnungslos auf dem C++ 0x-Teil davon. – Chubsdad

4

Ja, float ist symmetrisch in Minimal-/Maximalwerte.

Wenn Sie den niedrigsten darstellbaren Wert als Anfangswert verwenden eine Liste für seinen Maximalwert bei der Suche, betrachtet Unendlichkeit anstelle.

std::numeric_limits<T>::has_infinity() wird true für jeden numerischen Typ zurückgeben, die es hat und std::numeric_limits<T>::infinity() einen Wert zurück, immer größer ist als jede andere nicht-NaN-Wert für diese Art auswertet. Dieser Wert kann negiert werden und wird weniger als alles andere ausgewertet.