Namensräume
Varianten
Aktionen

std::numeric_limits

Von cppreference.com
< cpp‎ | types
 
 
Dienstprogramm-Bibliotheken
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Coroutine-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Drei-Wege-Vergleich
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

Allgemeine Hilfsmittel
Relationale Operatoren (in C++20 veraltet)
 
 
 
Definiert in Header <limits>
template< class T > class numeric_limits;

Die Klasse std::numeric_limits bietet eine standardisierte Möglichkeit, verschiedene Eigenschaften von arithmetischen Typen abzufragen (z.B. ist der größtmögliche Wert für den Typ int std::numeric_limits<int>::max()).

Diese Information wird über Spezialisierungen der Template-Klasse std::numeric_limits bereitgestellt. Die Standardbibliothek stellt Spezialisierungen für alle arithmetischen Typen zur Verfügung (hier werden nur die Spezialisierungen für cv-unqualifizierte arithmetische Typen aufgeführt).

Definiert in Header <limits>
template<> class numeric_limits<bool>;
template<> class numeric_limits<char>;
template<> class numeric_limits<signed char>;
template<> class numeric_limits<unsigned char>;
template<> class numeric_limits<wchar_t>;
template<> class numeric_limits<char8_t>;
(seit C++20)
template<> class numeric_limits<char16_t>;
(seit C++11)
template<> class numeric_limits<char32_t>;
(seit C++11)
template<> class numeric_limits<short>;
template<> class numeric_limits<unsigned short>;
template<> class numeric_limits<int>;
template<> class numeric_limits<unsigned int>;
template<> class numeric_limits<long>;
template<> class numeric_limits<unsigned long>;
template<> class numeric_limits<long long>;
(seit C++11)
template<> class numeric_limits<unsigned long long>;
(seit C++11)
template<> class numeric_limits<float>;
template<> class numeric_limits<double>;
template<> class numeric_limits<long double>;

Der Wert jedes Elements einer Spezialisierung von std::numeric_limits für einen cv-qualifizierten Typ cv T ist gleich dem Wert des entsprechenden Elements der Spezialisierung für den unqualifizierten Typ T. Zum Beispiel ist std::numeric_limits<int>::digits gleich std::numeric_limits<const int>::digits.

Aliase von arithmetischen Typen (wie z.B. std::size_t oder std::streamsize) können ebenfalls mit den std::numeric_limits Typ-Traits untersucht werden.

Standardtypen, die keine arithmetischen Typen sind, wie z.B. std::complex<T> oder std::nullptr_t, haben keine Spezialisierungen.

Wenn die Implementierung Integer-ähnliche Typen definiert, müssen auch für diese Spezialisierungen von std::numeric_limits bereitgestellt werden.

(seit C++20)

Implementierungen können Spezialisierungen von std::numeric_limits für implementierungsspezifische Typen bereitstellen: z.B. stellt GCC std::numeric_limits<__int128> bereit. Nicht-Standardbibliotheken können Spezialisierungen hinzufügen für von der Bibliothek bereitgestellte Typen, z.B. stellt OpenEXR std::numeric_limits<half> für einen 16-Bit-Gleitkommatyp bereit.

Inhalt

[bearbeiten] Template-Parameter

T - ein Typ, für den numerische Eigenschaften abgefragt werden sollen

[bearbeiten] Member-Konstanten

identifiziert Typen, für die std::numeric_limits spezialisiert ist
(öffentliche statische Member-Konstante) [bearbeiten]
[static]
identifiziert vorzeichenbehaftete Typen
(öffentliche statische Member-Konstante) [bearbeiten]
[static]
identifiziert Ganzzahltypen
(öffentliche statische Member-Konstante) [bearbeiten]
[static]
identifiziert exakte Typen
(öffentliche statische Member-Konstante) [bearbeiten]
identifiziert Gleitkommatypen, die den speziellen Wert "positive Unendlichkeit" darstellen können
(öffentliche statische Member-Konstante) [bearbeiten]
identifiziert Gleitkommatypen, die den speziellen Wert "quiet not-a-number" (NaN) darstellen können
(öffentliche statische Member-Konstante) [bearbeiten]
identifiziert Gleitkommatypen, die den speziellen Wert "signaling not-a-number" (NaN) darstellen können
(öffentliche statische Member-Konstante) [bearbeiten]
[static]
identifiziert den Denormalisierungsstil, der vom Gleitkommatyp verwendet wird
(öffentliche statische Member-Konstante) [bearbeiten]
identifiziert die Gleitkommatypen, die einen Präzisionsverlust als Denormalisierungsverlust und nicht als ungenaues Ergebnis erkennen
(öffentliche statische Member-Konstante) [bearbeiten]
[static]
identifiziert den Rundungsstil, der vom Typ verwendet wird
(öffentliche statische Member-Konstante) [bearbeiten]
[static]
identifiziert die IEC 559/IEEE 754 Gleitkommatypen
(öffentliche statische Member-Konstante) [bearbeiten]
[static]
identifiziert Typen, die eine endliche Menge von Werten darstellen
(öffentliche statische Member-Konstante) [bearbeiten]
[static]
identifiziert Typen, die Überläufe mit Modulo-Arithmetik behandeln
(öffentliche statische Member-Konstante) [bearbeiten]
[static]
Anzahl der radix-Ziffern, die ohne Änderung dargestellt werden können
(öffentliche statische Member-Konstante) [bearbeiten]
[static]
Anzahl der Dezimalziffern, die ohne Änderung dargestellt werden können
(öffentliche statische Member-Konstante) [bearbeiten]
[statisch] (C++11)
Anzahl der Dezimalziffern, die erforderlich sind, um alle Werte dieses Typs zu unterscheiden
(öffentliche statische Member-Konstante) [bearbeiten]
[static]
die Basis oder der ganzzahlige Basiswert, der für die Darstellung des gegebenen Typs verwendet wird
(öffentliche statische Member-Konstante) [bearbeiten]
eins mehr als die kleinste negative Potenz der Basis, die ein gültiger normalisierter Gleitkommawert ist
(öffentliche statische Member-Konstante) [bearbeiten]
die kleinste negative Potenz von zehn, die ein gültiger normalisierter Gleitkommawert ist
(öffentliche statische Member-Konstante) [bearbeiten]
eins mehr als die größte ganzzahlige Potenz der Basis, die ein gültiger endlicher Gleitkommawert ist
(öffentliche statische Member-Konstante) [bearbeiten]
die größte ganzzahlige Potenz von 10, die ein gültiger endlicher Gleitkommawert ist
(öffentliche statische Member-Konstante) [bearbeiten]
[static]
identifiziert Typen, die arithmetische Operationen zum Trappen bringen können
(öffentliche statische Member-Konstante) [bearbeiten]
identifiziert Gleitkommatypen, die "tinyness" vor dem Runden erkennen
(öffentliche statische Member-Konstante) [bearbeiten]

[bearbeiten] Member-Funktionen

[static]
gibt den kleinsten endlichen Wert des gegebenen nicht-Gleitkommatyps oder den kleinsten positiven normalen Wert des gegebenen Gleitkommatyps zurück
(öffentliche statische Member-Funktion) [bearbeiten]
[statisch] (C++11)
gibt den kleinsten endlichen Wert des gegebenen Typs zurück, d.h. den negativsten Wert für vorzeichenbehaftete Typen, 0 für vorzeichenlose Typen
(öffentliche statische Member-Funktion) [bearbeiten]
[static]
gibt den größten endlichen Wert des gegebenen Typs zurück
(öffentliche statische Member-Funktion) [bearbeiten]
[static]
gibt die Differenz zwischen 1.0 und dem nächstgrößeren darstellbaren Wert des gegebenen Gleitkommatyps zurück
(öffentliche statische Member-Funktion) [bearbeiten]
[static]
gibt den maximalen Rundungsfehler des gegebenen Gleitkommatyps zurück
(öffentliche statische Member-Funktion) [bearbeiten]
[static]
gibt den positiven Unendlichkeitswert des gegebenen Gleitkommatyps zurück
(öffentliche statische Member-Funktion) [bearbeiten]
[static]
gibt einen stillen NaN-Wert des gegebenen Gleitkommatyps zurück
(öffentliche statische Member-Funktion) [bearbeiten]
gibt einen Signal-NaN-Wert des gegebenen Gleitkommatyps zurück
(öffentliche statische Member-Funktion) [bearbeiten]
[static]
gibt den kleinsten positiven Subnormalwert des gegebenen Gleitkommatyps zurück
(öffentliche statische Member-Funktion) [bearbeiten]

[bearbeiten] Hilfsklassen

zeigt Gleitkomma-Rundungsmodi an
(enum) [bearbeiten]
zeigt Gleitkomma-Denormalisierungsmodi an
(enum) [bearbeiten]

[bearbeiten] Beziehung zu C-Bibliotheksmakrokonstanten

Spezialisierung
std::numeric_limits<T>
wobei T ist
Member
min() lowest()
(C++11)
max() radix
bool false false true 2
char CHAR_MIN CHAR_MIN CHAR_MAX 2
signed char SCHAR_MIN SCHAR_MIN SCHAR_MAX 2
unsigned char 0 0 UCHAR_MAX 2
wchar_t WCHAR_MIN WCHAR_MIN WCHAR_MAX 2
char8_t 0 0 UCHAR_MAX 2
char16_t 0 0 UINT_LEAST16_MAX 2
char32_t 0 0 UINT_LEAST32_MAX 2
short SHRT_MIN SHRT_MIN SHRT_MAX 2
signed short
unsigned short 0 0 USHRT_MAX 2
int INT_MIN INT_MIN INT_MAX 2
signed int
unsigned int 0 0 UINT_MAX 2
long LONG_MIN LONG_MIN LONG_MAX 2
signed long
unsigned long 0 0 ULONG_MAX 2
long long LLONG_MIN LLONG_MIN LLONG_MAX 2
signed long long
unsigned long long 0 0 ULLONG_MAX 2
Spezialisierung
std::numeric_limits<T>
wobei T ist
Member
denorm_min() min() lowest()
(C++11)
max() epsilon() digits digits10
float FLT_TRUE_MIN FLT_MIN -FLT_MAX FLT_MAX FLT_EPSILON FLT_MANT_DIG FLT_DIG
double DBL_TRUE_MIN DBL_MIN -DBL_MAX DBL_MAX DBL_EPSILON DBL_MANT_DIG DBL_DIG
long double LDBL_TRUE_MIN LDBL_MIN -LDBL_MAX LDBL_MAX LDBL_EPSILON LDBL_MANT_DIG LDBL_DIG
Spezialisierung
std::numeric_limits<T>
wobei T ist
Elemente (Fortsetzung)
min_exponent min_exponent10 max_exponent max_exponent10 radix
float FLT_MIN_EXP FLT_MIN_10_EXP FLT_MAX_EXP FLT_MAX_10_EXP FLT_RADIX
double DBL_MIN_EXP DBL_MIN_10_EXP DBL_MAX_EXP DBL_MAX_10_EXP FLT_RADIX
long double LDBL_MIN_EXP LDBL_MIN_10_EXP LDBL_MAX_EXP LDBL_MAX_10_EXP FLT_RADIX

[bearbeiten] Beispiel

#include <iostream>
#include <limits>
 
int main() 
{
    std::cout << "type\t│ lowest()\t│ min()\t\t│ max()\n"
              << "bool\t│ "
              << std::numeric_limits<bool>::lowest() << "\t\t│ "
              << std::numeric_limits<bool>::min() << "\t\t│ "
              << std::numeric_limits<bool>::max() << '\n'
              << "uchar\t│ "
              << +std::numeric_limits<unsigned char>::lowest() << "\t\t│ "
              << +std::numeric_limits<unsigned char>::min() << "\t\t│ "
              << +std::numeric_limits<unsigned char>::max() << '\n'
              << "int\t│ "
              << std::numeric_limits<int>::lowest() << "\t│ "
              << std::numeric_limits<int>::min() << "\t│ "
              << std::numeric_limits<int>::max() << '\n'
              << "float\t│ "
              << std::numeric_limits<float>::lowest() << "\t│ "
              << std::numeric_limits<float>::min() << "\t│ "
              << std::numeric_limits<float>::max() << '\n'
              << "double\t│ "
              << std::numeric_limits<double>::lowest() << "\t│ "
              << std::numeric_limits<double>::min() << "\t│ "
              << std::numeric_limits<double>::max() << '\n';
}

Mögliche Ausgabe

type	│ lowest()	│ min()		│ max()
bool	│ 0		│ 0		│ 1
uchar	│ 0		│ 0		│ 255
int	│ -2147483648	│ -2147483648	│ 2147483647
float	│ -3.40282e+38	│ 1.17549e-38	│ 3.40282e+38
double	│ -1.79769e+308	│ 2.22507e-308	│ 1.79769e+308

[bearbeiten] Fehlerberichte

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 201 C++98 Spezialisierungen für alle fundamentalen Typen müssen bereitgestellt werden nicht-arithmetische Typen ausgeschlossen
LWG 559 C++98 es war unklar, ob die std::numeric_limits
Spezialisierung für einen cv-qualifizierten Typ genauso verhält wie
die entsprechende Spezialisierung für den cv-unqualifizierten Typ
sie haben das
gleiche Verhalten

[bearbeiten] Siehe auch