std::numeric_limits<T>::digits10
est le garanti nombre de chiffres dans un sens qu'un certain nombre avec le nombre de chiffres peut être représenté dans le type T
sans provoquer de débordement ou de perte d'informations.
E.g. std::numeric_limits<int64_t>::digits10
ne peut pas être 19 car 9'223'372'036'854'775'808
a 19 chiffres mais n'est pas représentable dans int64_t
.
En général, cette valeur garantie de digits<N>
souffrira toujours de cet écart «un de moins» sur les plateformes où digits<N>
n'est pas une puissance de radix
utilisée pour la représentation interne. Dans les cas non-exotiques radix
est 2. Puisque 10 n'est pas une puissance de 2, digits10
est plus petit de 1 que la longueur de la valeur maximale.
Si std::numeric_limits<T>
incluait digits16
ou digits8
ces valeurs auraient été "précises" pour les plates-formes radix 2.
[cppreference] (http://en.cppreference.com/w/cpp/types/numeric_limits/digits10) dit: "n'importe quel nombre avec autant de chiffres décimaux peut être tenu par le type". Puisque 999 ne peut pas être représenté par 'int8_t', la réponse ne peut pas être 3. –
@KerrekSB Ha, j'ai compris. Merci! – vladon