Namespaces
Variants

std:: numeric_limits

From cppreference.net
Utilities library
Défini dans l'en-tête <limits>
template < class T > class numeric_limits ;

La classe template std::numeric_limits fournit un moyen standardisé d'interroger diverses propriétés des types arithmétiques (par exemple, la plus grande valeur possible pour le type int est std :: numeric_limits < int > :: max ( ) ).

Ces informations sont fournies via des spécialisations du modèle std::numeric_limits . La bibliothèque standard met à disposition des spécialisations pour tous les types arithmétiques (ne liste que les spécialisations pour les types arithmétiques non qualifiés cv) :

Défini dans l'en-tête <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 > ;
(depuis C++20)
template <> class numeric_limits < char16_t > ;
(depuis C++11)
template <> class numeric_limits < char32_t > ;
(depuis 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 > ;
(depuis C++11)
template <> class numeric_limits < unsigned long long > ;
(depuis C++11)
template <> class numeric_limits < float > ;
template <> class numeric_limits < double > ;
template <> class numeric_limits < long double > ;

La valeur de chaque membre d'une spécialisation de std::numeric_limits sur un type qualifié cv cv T est égale à la valeur du membre correspondant de la spécialisation sur le type non qualifié T . Par exemple, std :: numeric_limits < int > :: digits est égal à std :: numeric_limits < const int > :: digits .

Les alias de types arithmétiques (tels que std::size_t ou std::streamsize ) peuvent également être examinés avec les traits de type std::numeric_limits .

Les types standards non arithmétiques, tels que std:: complex < T > ou std::nullptr_t , n'ont pas de spécialisations.

Si l'implémentation définit des types de classe entière , des spécialisations de std::numeric_limits doivent également être fournies pour ceux-ci.

(depuis C++20)

Les implémentations peuvent fournir des spécialisations de std::numeric_limits pour des types spécifiques à l'implémentation : par exemple, GCC fournit std::numeric_limits<__int128> . Les bibliothèques non standard peuvent ajouter des spécialisations pour les types fournis par la bibliothèque, par exemple OpenEXR fournit std::numeric_limits<half> pour un type à virgule flottante 16 bits.

Table des matières

Paramètres du modèle

T - un type pour lequel récupérer les propriétés numériques

Constantes membres

identifie les types pour lesquels std::numeric_limits est spécialisé
(constante de membre public static)
[static]
identifie les types signés
(constante membre publique statique)
[static]
identifie les types entiers
(constante de membre public static)
[static]
identifie les types exacts
(constante de membre public static)
identifie les types à virgule flottante qui peuvent représenter la valeur spéciale «infini positif»
(constante membre publique statique)
identifie les types à virgule flottante qui peuvent représenter la valeur spéciale "not-a-number silencieux" (NaN)
(constante membre publique statique)
identifie les types à virgule flottante qui peuvent représenter la valeur spéciale "not-a-number signalant" (NaN)
(constante membre publique statique)
[static]
identifie le style de dénormalisation utilisé par le type à virgule flottante
(constante membre publique statique)
identifie les types à virgule flottante qui détectent la perte de précision comme une perte de dénormalisation plutôt qu'un résultat inexact
(constante de membre public static)
[static]
identifie le style d'arrondi utilisé par le type
(constante de membre public static)
[static]
identifie les types à virgule flottante IEC 559/IEEE 754
(constante de membre public static)
[static]
identifie les types qui représentent un ensemble fini de valeurs
(constante de membre public static)
[static]
identifie les types qui gèrent les dépassements avec l'arithmétique modulo
(constante membre publique statique)
[static]
nombre de radix chiffres pouvant être représentés sans modification
(constante de membre public static)
[static]
nombre de chiffres décimaux pouvant être représentés sans modification
(constante de membre public static)
[static] (C++11)
nombre de chiffres décimaux nécessaires pour différencier toutes les valeurs de ce type
(constante de membre public static)
[static]
la base ou la base entière utilisée par la représentation du type donné
(constante de membre public static)
un de plus que la plus petite puissance négative de la base qui est une valeur normalisée valide en virgule flottante
(constante de membre public static)
la plus petite puissance négative de dix qui est une valeur normalisée valide en virgule flottante
(constante de membre public static)
un de plus que la plus grande puissance entière de la base qui est une valeur finie valide en virgule flottante
(constante de membre public static)
la plus grande puissance entière de 10 qui est une valeur flottante finie valide
(constante de membre public static)
[static]
identifie les types qui peuvent provoquer le déclenchement de pièges lors d'opérations arithmétiques
(constante membre publique statique)
identifie les types à virgule flottante qui détectent la dénormalisation avant l'arrondi
(constante de membre public static)

Fonctions membres

[static]
renvoie la plus petite valeur finie du type non flottant donné, ou la plus petite valeur normale positive du type flottant donné
(fonction membre publique statique)
[static] (C++11)
renvoie la valeur finie la plus basse du type donné, c'est-à-dire la valeur la plus négative pour les types signés, 0 pour les types non signés
(fonction membre publique statique)
[static]
renvoie la plus grande valeur finie du type donné
(fonction membre publique statique)
[static]
renvoie la différence entre 1.0 et la valeur représentable suivante du type flottant donné
(fonction membre publique statique)
[static]
renvoie l'erreur d'arrondi maximale du type flottant donné
(fonction membre publique statique)
[static]
renvoie la valeur d'infini positif du type flottant donné
(fonction membre publique statique)
[static]
renvoie une valeur NaN silencieuse du type flottant donné
(fonction membre publique statique)
renvoie une valeur NaN signalée du type flottant donné
(fonction membre publique statique)
[static]
renvoie la plus petite valeur sous-normale positive du type flottant donné
(fonction membre publique statique)

Classes d'assistance

indique les modes d'arrondi en virgule flottante
(enum)
indique les modes de dénormalisation en virgule flottante
(enum)

Relation avec les constantes de macro de la bibliothèque C

**Note:** Aucun texte à traduire n'a été trouvé dans ce fragment HTML. Tous les éléments visibles sont soit : - Des balises HTML et attributs (non traduits selon les instructions) - Du code C++ dans des balises ` ` (non traduit selon les instructions) - Des termes spécifiques C++ comme "unsigned short" et "USHRT_MAX" (non traduits selon les instructions) - Des valeurs numériques qui ne nécessitent pas de traduction Le contenu est déjà entièrement en anglais technique et conforme aux exigences de non-traduction spécifiées. **Note:** Aucune traduction n'a été effectuée car : - Tous les éléments textuels se trouvent dans des balises ` ` qui sont considérées comme du code C++ - Les termes comme "unsigned int" et "UINT_MAX" sont des termes spécifiques au C++ - Les chiffres "0" et "2" font partie de la syntaxe du code - Aucun texte en langage naturel ne nécessitait une traduction en français **Note:** Aucun texte n'a été traduit car : - `long` est un terme spécifique au C++ (type de données) - `LONG_MIN` et `LONG_MAX` sont des macros spécifiques au C++ - Le chiffre `2` ne nécessite pas de traduction - Tous les textes se trouvent dans des balises HTML qui doivent être préservées
Spécialisation
std::numeric_limits<T>
T est
Membres
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
Spécialisation
std::numeric_limits<T>
T est
Membres
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
Spécialisation
std::numeric_limits<T>
T est
Membres (suite)
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

Exemple

#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';
}

Sortie possible :

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

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement correct
LWG 201 C++98 les spécialisations pour tous les types fondamentaux doivent être fournies exclut les types non arithmétiques
LWG 559 C++98 il n'était pas clair si la std::numeric_limits
spécialisation pour un type cv-qualifié se comporte de la même manière
que la spécialisation correspondante pour le type non cv-qualifié
ils ont le
même comportement

Voir aussi