numeric_limits<T>::min();
numeric_limits<T>::lowest();
Was ist der Unterschied zwischen dem Wert, der von beiden Funktionen zurückgegeben wird?numeric_limits niedrigste und minimale Elementfunktionen
numeric_limits<T>::min();
numeric_limits<T>::lowest();
Was ist der Unterschied zwischen dem Wert, der von beiden Funktionen zurückgegeben wird?numeric_limits niedrigste und minimale Elementfunktionen
Absatz 18.3.2.4 der Norm legt 11 ++ C:
static constexpr T min() noexcept
;1 Minimaler endlicher Wert.
2 Gibt für Floating-Typen mit Denormalisierung den minimalen positiven normalisierten Wert zurück.
3 Bedeutungsvolles für alle Spezialisierungen
[...]
static constexpr T lowest() noexcept
;6 Ein endlicher Wert x, so dass es keinen anderen endlichen Wert y gibt, wo y < x.
7 Sinnvoll für alle Spezialisierungen, in denen is_bounded! = False ist.
Fußnote 197 fügt dann die entsprechende Bemerkung:
lowest()
notwendig ist, weil nicht alle Gleitkommadarstellungen einen kleinsten (negativsten) Wert haben, der die negativ der größten (positivsten) ist endlicher Wert.
Wenn Sie eine Referenz dieser Funktionen überprüfen, z. this one for min
und this one for lowest
können Sie sehen, dass es einige Werte gibt, die sich unterscheiden.
Für Punkt Typen floating min
die kleinste endliche Zahl zurückgibt, die > 0
darstellbare in dem Typ ist (dh die Anzahl der niedrigsten Absolutwert != 0
) während lowest
gibt den kleinsten finite Zahl, repräsentierbar ist (dh der negative Zahl der maximalen absoluten Wert, der kleiner als -infinity
ist).
Die kleinste darstellbare Zahl ist negativ unendlich; "niedrigste" gibt den kleinsten ** endlichen ** darstellbaren Wert an. –
Bearbeitet, danke für den Kommentar. – filmor
+1 für genaue Zitat aus dem Standard in weniger als 5 Minuten. – Morwenn
in einem anderen Wort "niedrigste" zurück etwas wie das 2s Komplement für maximale positive ganze Zahl. –
@Muhammala: Für ganzzahlige Typen gibt es keinen Unterschied zwischen 'min()' und 'lowest()'. –