std::numeric_limits<T>:: digits10
|
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) |
|
[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 statique publique) |
|
[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 statique publique) |