Namespaces
Variants

std::numeric_limits<T>:: digits10

From cppreference.net
Utilities library
static const int digits10 ;
(jusqu'à C++11)
static constexpr int digits10 ;
(depuis C++11)

La valeur de std:: numeric_limits < T > :: digits10 est le nombre de chiffres décimaux qui peuvent être représentés par le type T sans modification, c'est-à-dire que tout nombre avec autant de chiffres décimaux significatifs peut être converti en une valeur de type T et reconverti en forme décimale sans changement dû à l'arrondi ou au dépassement. Pour les types en base radix , c'est la valeur de digits() ( digits - 1 pour les types à virgule flottante) multipliée par log 10 (radix) et arrondie vers le bas.

Spécialisations standards

T valeur de std:: numeric_limits < T > :: digits10
/* non-spécialisé */ 0
bool 0
char std:: numeric_limits < char > :: digits * std:: log10 ( 2 )
signed char std:: numeric_limits < signed char > :: digits * std:: log10 ( 2 )
unsigned char std:: numeric_limits < unsigned char > :: digits * std:: log10 ( 2 )
wchar_t std:: numeric_limits < wchar_t > :: digits * std:: log10 ( 2 )
char8_t (depuis C++20) std:: numeric_limits < char8_t > :: digits * std:: log10 ( 2 )
char16_t (depuis C++11) std:: numeric_limits < char16_t > :: digits * std:: log10 ( 2 )
char32_t (depuis C++11) std:: numeric_limits < char32_t > :: digits * std:: log10 ( 2 )
short std:: numeric_limits < short > :: digits * std:: log10 ( 2 )
unsigned short std:: numeric_limits < unsigned short > :: digits * std:: log10 ( 2 )
int std:: numeric_limits < int > :: digits * std:: log10 ( 2 )
unsigned int std:: numeric_limits < unsigned int > :: digits * std:: log10 ( 2 )
long std:: numeric_limits < long > :: digits * std:: log10 ( 2 )
unsigned long std:: numeric_limits < unsigned long > :: digits * std:: log10 ( 2 )
long long (depuis C++11) std:: numeric_limits < long long > :: digits * std:: log10 ( 2 )
unsigned long long (depuis C++11) std:: numeric_limits < unsigned long long > :: digits * std:: log10 ( 2 )
float FLT_DIG ( 6 pour IEEE float )
double DBL_DIG ( 15 pour IEEE double )
long double LDBL_DIG ( 18 pour le long double 80-bit Intel ; 33 pour le quadruple IEEE)

Exemple

Un type binaire 8 bits peut représenter exactement n'importe quel nombre décimal à deux chiffres, mais les nombres décimaux à 3 chiffres 256..999 ne peuvent pas être représentés. La valeur de digits10 pour un type 8 bits est 2 ( 8 * std:: log10 ( 2 ) est 2.41)

Le type à virgule flottante standard IEEE 754 32 bits possède une partie fractionnaire de 24 bits (23 bits écrits, un implicite), ce qui pourrait suggérer qu'il peut représenter des nombres décimaux à 7 chiffres ( 24 * std:: log10 ( 2 ) vaut 7,22), mais les erreurs d'arrondi relatives ne sont pas uniformes et certaines valeurs à virgule flottante avec 7 chiffres décimaux ne survivent pas à la conversion en float 32 bits et retour : le plus petit exemple positif est 8.589973e9 , qui devient 8.589974e9 après l'aller-retour. Ces erreurs d'arrondi ne peuvent pas dépasser un bit dans la représentation, et digits10 est calculé comme ( 24 - 1 ) * std:: log10 ( 2 ) , ce qui vaut 6,92. L'arrondi à l'entier inférieur donne la valeur 6.

De même, la chaîne de 16 chiffres 9007199254740993 ne survit pas au parcours texte->double->texte, devenant 9007199254740992 : le type double IEEE 754 64 bits ne garantit ce parcours que pour 15 chiffres décimaux.

Voir aussi

[static] (C++11)
nombre de chiffres décimaux nécessaires pour différencier toutes les valeurs de ce type
(constante de membre statique publique)
[static]
la base entière utilisée par la représentation du type donné
(constante de membre statique publique)
[static]
nombre de chiffres en base radix pouvant être représentés sans modification
(constante de membre statique publique)
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 statique publique)
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 statique publique)