Namespaces
Variants

std::numeric_limits<T>::digits10

De es.cppreference.net
 
 
Biblioteca de utilidades
Soporte de lenguaje
Soporte de tipos (tipos básicos, RTTI)
Macros de prueba de características de biblioteca (C++20)
Utilidades del programa
Funciones variádicas
Soporte de corrutinas (C++20)
Soporte de contratos (C++26)
Comparación de tres vías
(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 de 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 const int digits10;
(hasta C++11)
static constexpr int digits10;
(desde C++11)

El valor de std::numeric_limits<T>::digits10 es el número de dígitos en base 10 que pueden ser representados por el tipo T sin cambios, es decir, cualquier número con esta cantidad de dígitos decimales significativos puede convertirse a un valor de tipo T y volver a la forma decimal, sin cambios debido a redondeo o desbordamiento. Para tipos base-radix, es el valor de digits() (digits - 1 para tipos de punto flotante) multiplicado por log10(radix) y redondeado hacia abajo.

Especializaciones estándar

T valor de std:: numeric_limits < T > :: digits10
/* no especializado */ ​ 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 (desde C++20) std:: numeric_limits < char8_t > :: digits * std:: log10 ( 2 )
char16_t (desde C++11) std:: numeric_limits < char16_t > :: digits * std:: log10 ( 2 )
char32_t (desde 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 (desde C++11) std:: numeric_limits < long long > :: digits * std:: log10 ( 2 )
unsigned long long (desde C++11) std:: numeric_limits < unsigned long long > :: digits * std:: log10 ( 2 )
float FLT_DIG ( 6 para IEEE float )
double DBL_DIG ( 15 para IEEE double )
long double LDBL_DIG ( 18 para long double de 80 bits Intel; 33 para cuádruple IEEE)

Ejemplo

Un tipo binario de 8 bits puede representar exactamente cualquier número decimal de dos dígitos, pero los números decimales de 3 dígitos 256..999 no pueden representarse. El valor de digits10 para un tipo de 8 bits es 2 ( 8 * std:: log10 ( 2 ) es 2.41)

El tipo de punto flotante estándar IEEE 754 de 32 bits tiene una parte fraccionaria de 24 bits (23 bits escritos, uno implícito), lo que puede sugerir que puede representar números decimales de 7 dígitos ( 24 * std:: log10 ( 2 ) es 7.22), pero los errores de redondeo relativo no son uniformes y algunos valores de punto flotante con 7 dígitos decimales no sobreviven la conversión a float de 32 bits y viceversa: el ejemplo positivo más pequeño es 8.589973e9 , que se convierte en 8.589974e9 después del viaje de ida y vuelta. Estos errores de redondeo no pueden exceder un bit en la representación, y digits10 se calcula como ( 24 - 1 ) * std:: log10 ( 2 ) , que es 6.92. Redondear hacia abajo resulta en el valor 6.

Del mismo modo, la cadena de 16 dígitos 9007199254740993 no sobrevive al ciclo texto->double->texto, convirtiéndose en 9007199254740992 : el tipo double de 64 bits IEEE 754 garantiza este ciclo solo para 15 dígitos decimales.

Véase también

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