Namespaces
Variants

std::numeric_limits<T>:: max_digits10

From cppreference.net
Utilities library
static constexpr int max_digits10
(seit C++11)

Der Wert von std:: numeric_limits < T > :: max_digits10 ist die Anzahl der Basis-10-Ziffern, die erforderlich sind, um alle unterschiedlichen Werte des Typs T eindeutig darzustellen, wie sie beispielsweise für Serialisierung/Deserialisierung in Text benötigt werden. Diese Konstante ist für alle Gleitkommatypen von Bedeutung.

Inhaltsverzeichnis

Standardspezialisierungen

**Erklärung:** - HTML-Tags und Attribute wurden unverändert beibehalten - Der C++-Code (`int` und `0`) innerhalb der ` ` Tags wurde nicht übersetzt - Die numerische Null (`0`) bleibt als Zahl unverändert - Die Leerzeichen und Formatierung wurden exakt erhalten - Nur der strukturelle HTML-Code wird dargestellt, da kein übersetzbarer Textinhalt außerhalb der Code-Blöcke vorhanden ist
T Wert von std:: numeric_limits < T > :: max_digits10
/* nicht spezialisiert */ 0
bool 0
char 0
signed char 0
unsigned char 0
wchar_t 0
char8_t (seit C++20) 0
char16_t 0
char32_t 0
short 0
unsigned short 0
int 0
unsigned int 0
long 0
unsigned long 0
long long 0
unsigned long long 0
float FLT_DECIMAL_DIG oder std:: ceil ( std:: numeric_limits < float > :: digits * std:: log10 ( 2 ) + 1 )
double DBL_DECIMAL_DIG oder std:: ceil ( std:: numeric_limits < double > :: digits * std:: log10 ( 2 ) + 1 )
long double DECIMAL_DIG oder LDBL_DECIMAL_DIG oder std:: ceil ( std:: numeric_limits < long double > :: digits * std:: log10 ( 2 ) + 1 )

Hinweise

Im Gegensatz zu den meisten mathematischen Operationen ist die Konvertierung eines Fließkommawerts in Text und zurück exakt , solange mindestens max_digits10 verwendet wurden ( 9 für float , 17 für double ): Es ist garantiert, dass derselbe Fließkommawert erzeugt wird, auch wenn die Zwischentextdarstellung nicht exakt ist. Es können über hundert Dezimalstellen erforderlich sein, um den genauen Wert eines float in Dezimalschreibweise darzustellen.

Beispiel

#include <cmath>
#include <iomanip>
#include <iostream>
#include <limits>
#include <sstream>
int main()
{
    float value = 10.0000086;
    constexpr auto digits10 = std::numeric_limits<decltype(value)>::digits10;
    constexpr auto max_digits10 = std::numeric_limits<decltype(value)>::max_digits10;
    constexpr auto submax_digits10 = max_digits10 - 1;
    std::cout << "float:\n"
                 "       digits10 is " << digits10 << " digits\n"
                 "   max_digits10 is " << max_digits10 << " digits\n"
                 "submax_digits10 is " << submax_digits10 << " digits\n\n";
    const auto original_precision = std::cout.precision();
    for (auto i = 0; i < 5; ++i)
    {
        std::cout
            << "   max_digits10: " << std::setprecision(max_digits10) << value << "\n"
               "submax_digits10: " << std::setprecision(submax_digits10) << value
            << "\n\n";
        value = std::nextafter(value, std::numeric_limits<decltype(value)>::max());
    }
    std::cout.precision(original_precision);
}

Ausgabe:

float:
       digits10 is 6 digits
   max_digits10 is 9 digits
submax_digits10 is 8 digits
   max_digits10: 10.0000086
submax_digits10: 10.000009
   max_digits10: 10.0000095
submax_digits10: 10.00001
   max_digits10: 10.0000105
submax_digits10: 10.00001
   max_digits10: 10.0000114
submax_digits10: 10.000011
   max_digits10: 10.0000124
submax_digits10: 10.000012

Siehe auch

[static]
die Basis oder Ganzzahlbasis, die für die Darstellung des gegebenen Typs verwendet wird
(öffentliche statische Elementkonstante)
[static]
Anzahl der radix Ziffern, die ohne Änderung dargestellt werden können
(öffentliche statische Elementkonstante)
[static]
Anzahl der Dezimalziffern, die ohne Änderung dargestellt werden können
(öffentliche statische Elementkonstante)
eins mehr als der kleinste negative Exponent der Basis, der einen gültigen normalisierten Gleitkommawert darstellt
(öffentliche statische Elementkonstante)
eins mehr als der größte ganzzahlige Exponent der Basis, der einen gültigen endlichen Gleitkommawert darstellt
(öffentliche statische Elementkonstante)