std::numeric_limits<T>::digits10
ist die garantiert Anzahl der Stellen in dem Sinne, dass eine Zahl mit so vielen Stellen kann in Typ T
ohne Überlauf oder Informationsverlust verursacht dargestellt werden.
z. std::numeric_limits<int64_t>::digits10
kann nicht 19 sein, da 9'223'372'036'854'775'808
19 Ziffern hat, aber in int64_t
nicht darstellbar ist.
Im allgemeinen Fall solchen Garantiewert von digits<N>
wird von dieser „einer weniger“ Diskrepanz auf Plattformen immer leiden, wo digits<N>
keine Potenz von radix
für die interne Darstellung verwendet wird. In nicht-exotischen Fällen ist 2. Da 10 keine Potenz von 2 ist, ist digits10
um 1 kleiner als die Länge des Maximalwerts.
Wenn std::numeric_limits<T>
enthalten digits16
oder digits8
wären diese Werte für radix 2-Plattformen "präzise" gewesen.
[cppreference] darstellen (http://en.cppreference.com/w/cpp/types/numeric_limits/digits10) sagt: "Eine beliebige Zahl mit so vielen Dezimalziffern kann vom Typ gehalten werden". Da 999 nicht durch 'int8_t' repräsentiert werden kann, kann die Antwort nicht 3 sein. –
@KerrekSB Ha, verstanden. Vielen Dank! – vladon