std::numeric_limits<T>:: digits10
|
static
const
int
digits10
;
|
(bis C++11) | |
|
static
constexpr
int
digits10
;
|
(seit C++11) | |
Der Wert von
std::
numeric_limits
<
T
>
::
digits10
ist die Anzahl der Basis-10-Ziffern, die vom Typ
T
ohne Änderung dargestellt werden können, das heißt, jede Zahl mit dieser Anzahl signifikanter Dezimalziffern kann in einen Wert des Typs
T
und zurück in Dezimalform umgewandelt werden, ohne dass es aufgrund von Rundung oder Überlauf zu Änderungen kommt. Für Basis-
Radix
-Typen ist es der Wert von
digits()
(
digits
-
1
für Gleitkommatypen) multipliziert mit
log
10
(radix)
und abgerundet.
Standardspezialisierungen
T
|
Wert von std:: numeric_limits < T > :: digits10 |
| /* nicht spezialisiert */ | 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 (seit C++20) | std:: numeric_limits < char8_t > :: digits * std:: log10 ( 2 ) |
| char16_t (seit C++11) | std:: numeric_limits < char16_t > :: digits * std:: log10 ( 2 ) |
| char32_t (seit 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 (seit C++11) | std:: numeric_limits < long long > :: digits * std:: log10 ( 2 ) |
| unsigned long long (seit C++11) | std:: numeric_limits < unsigned long long > :: digits * std:: log10 ( 2 ) |
| float | FLT_DIG ( 6 für IEEE float ) |
| double | DBL_DIG ( 15 für IEEE double ) |
| long double | LDBL_DIG ( 18 für 80-Bit Intel long double ; 33 für IEEE quadruple) |
Beispiel
Ein 8-Bit-Binärtyp kann jede zweistellige Dezimalzahl exakt darstellen, aber dreistellige Dezimalzahlen 256..999 können nicht dargestellt werden. Der Wert von
digits10
für einen 8-Bit-Typ ist 2 (
8
*
std::
log10
(
2
)
ist 2.41)
Der standardmäßige 32-Bit-IEEE-754-Gleitkommatyp hat einen 24-Bit-Bruchteil (23 geschriebene Bits, eines implizit), was nahelegen könnte, dass er 7-stellige Dezimalzahlen darstellen kann (
24
*
std::
log10
(
2
)
beträgt 7,22), aber relative Rundungsfehler sind ungleichmäßig und einige Gleitkommawerte mit 7 Dezimalstellen überstehen die Konvertierung zu 32-Bit-Float und zurück nicht: das kleinste positive Beispiel ist
8.589973e9
, das nach dem Rundungsdurchlauf zu
8.589974e9
wird. Diese Rundungsfehler können kein Bit in der Darstellung überschreiten, und
digits10
wird berechnet als
(
24
-
1
)
*
std::
log10
(
2
)
, was 6,92 ergibt. Abrunden führt zum Wert 6.
Ebenso übersteht die 16-stellige Zeichenkette 9007199254740993 den Text->Double->Text-Roundtrip nicht und wird zu 9007199254740992 : Der 64-Bit-IEEE-754-Typ double garantiert diesen Roundtrip nur für 15 Dezimalstellen.
Siehe auch
|
[static]
(C++11)
|
Anzahl der Dezimalstellen, die notwendig sind, um alle Werte dieses Typs zu unterscheiden
(öffentliche statische Memberkonstante) |
|
[static]
|
die Basis oder Ganzzahlbasis, die von der Darstellung des gegebenen Typs verwendet wird
(öffentliche statische Memberkonstante) |
|
[static]
|
Anzahl der
radix
-Ziffern, die ohne Änderung dargestellt werden können
(öffentliche statische Memberkonstante) |
|
[static]
|
eins mehr als der kleinste negative Exponent der Basis, der einen gültigen normalisierten Gleitkommawert darstellt
(öffentliche statische Memberkonstante) |
|
[static]
|
eins mehr als der größte ganzzahlige Exponent der Basis, der einen gültigen endlichen Gleitkommawert darstellt
(öffentliche statische Memberkonstante) |