Namespaces
Variants

std::numeric_limits<T>::max_digits10

De es.cppreference.net
 
 
Biblioteca de utilidades
Soporte del lenguaje
Soporte de tipos (tipos básicos, RTTI)
Macros de prueba de características de la biblioteca (C++20)
Utilidades del programa
Funciones variádicas
Soporte de corrutinas (C++20)
Soporte de contratos (C++26)
Comparación tripartita
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilidades generales
Operadores relacionales (obsoleto en C++20)
 
Soporte de tipos
Tipos básicos
Tipos enteros de ancho fijo (C++11)
Tipos de punto flotante de ancho fijo (C++23)
(C++11)    
(C++17)
Límites numéricos
Interfaz de límites numéricos de C
Información de tipo en tiempo de ejecución
 
 
static constexpr int max_digits10
(desde C++11)

El valor de std::numeric_limits<T>::max_digits10 es el número de dígitos en base 10 que son necesarios para representar de manera única todos los valores distintos del tipo T, como por ejemplo, necesario para la serialización/deserialización a texto. Esta constante es significativa para todos los tipos de punto flotante.

Especializaciones estándar

T Valor de std:: numeric_limits < T > :: max_digits10
/* no especializado */ ​ 0 ​
bool ​ 0 ​
char ​ 0 ​
signed char ​ 0 ​
unsigned char ​ 0 ​
wchar_t ​ 0 ​
char8_t (desde 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 o std:: ceil ( std:: numeric_limits < float > :: digits * std:: log10 ( 2 ) + 1 )
double DBL_DECIMAL_DIG o std:: ceil ( std:: numeric_limits < double > :: digits * std:: log10 ( 2 ) + 1 )
long double DECIMAL_DIG o LDBL_DECIMAL_DIG o std:: ceil ( std:: numeric_limits < long double > :: digits * std:: log10 ( 2 ) + 1 )

Notas

A diferencia de la mayoría de las operaciones matemáticas, la conversión de un valor de punto flotante a texto y de vuelta es exacta siempre que se utilicen al menos max_digits10 ( 9 para float , 17 para double ): se garantiza que producirá el mismo valor de punto flotante, aunque la representación intermedia en texto no sea exacta. Puede requerir más de cien dígitos decimales para representar el valor preciso de un float en notación decimal.

Ejemplo

#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);
}

Salida:

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

Véase también

[static]
la base o raíz entera utilizada por la representación del tipo dado
(constante de miembro estática pública)
[static]
número de dígitos en radix que pueden representarse sin cambio
(constante de miembro estática pública)
[static]
número de dígitos decimales que pueden representarse sin cambio
(constante de miembro estática pública)
uno más que la potencia negativa más pequeña de la base que es un valor válido normalizado de punto flotante
(constante de miembro estática pública)
uno más que la mayor potencia entera de la base que es un valor finito válido de punto flotante
(constante de miembro estática pública)