Espacios de nombres
Variantes
Acciones

Límites numéricos

De cppreference.com
< c‎ | types
Definido en la cabecera <stdint.h>
PTRDIFF_MIN
(C99)
valor mínimo del objeto de tipo ptrdiff_t
(macro de constante)
PTRDIFF_MAX
(C99)
valor máximo del objeto de tipo ptrdiff_t
(macro de constante)
SIZE_MAX
(C99)
valor máximo del objeto de tipo size_t
(macro de constante)
SIG_ATOMIC_MIN
(C99)
valor mínimo del objeto de tipo sig_atomic_t
(macro de constante)
SIG_ATOMIC_MAX
(C99)
valor máximo del objeto de tipo sig_atomic_t
(macro de constante)
WINT_MIN
(C99)
valor mínimo del objeto de tipo wint_t
(macro de constante)
WINT_MAX
(C99)
valor máximo del objeto de tipo wint_t
(macro de constante)
Definido en la cabecera <wchar.h>
WCHAR_MIN
(C99)
valor mínimo del objeto de tipo wchar_t
(macro de constante)
WCHAR_MAX
(C99)
valor máximo del objeto de tipo wchar_t
(macro de constante)

Contenido

[editar] Ejemplo

#include <stdio.h>
#include <stdint.h>
#include <wchar.h>
 
int main(void)
{
    printf("PTRDIFF_MIN    = %td\n", PTRDIFF_MIN);
    printf("PTRDIFF_MAX    = %+td\n", PTRDIFF_MAX);
    printf("SIZE_MAX       = %zu\n", SIZE_MAX);
    printf("SIG_ATOMIC_MIN = %+jd\n",(intmax_t)SIG_ATOMIC_MIN);
    printf("SIG_ATOMIC_MAX = %+jd\n",(intmax_t)SIG_ATOMIC_MAX);
    printf("WCHAR_MIN      = %+jd\n",(intmax_t)WCHAR_MIN);
    printf("WCHAR_MAX      = %+jd\n",(intmax_t)WCHAR_MAX);
    printf("WINT_MIN       = %jd\n", (intmax_t)WINT_MIN);
    printf("WINT_MAX       = %jd\n", (intmax_t)WINT_MAX);
}

Posible salida:

PTRDIFF_MIN    = -9223372036854775808
PTRDIFF_MAX    = +9223372036854775807
SIZE_MAX       = 18446744073709551615
SIG_ATOMIC_MIN = -2147483648
SIG_ATOMIC_MAX = +2147483647
WCHAR_MIN      = -2147483648
WCHAR_MAX      = +2147483647
WINT_MIN       = 0
WINT_MAX       = 4294967295

[editar] Límites de los tipos enteros

Definido en la cabecera <limits.h>
CHAR_BIT
número de bits en un byte
(macro de constante)
MB_LEN_MAX
número máximo de bytes en un carácter multibyte
(macro de constante)
CHAR_MIN
valor mínimo de char
(macro de constante)
CHAR_MAX
valor máximo de char
(macro de constante)
SCHAR_MINSHRT_MININT_MINLONG_MINLLONG_MIN
(C99)
valor mínimo de signed char, short, int, long y long long respectivamente
(macro de constante)
SCHAR_MAXSHRT_MAXINT_MAXLONG_MAXLLONG_MAX
(C99)
valor máximo de signed char, short, int, long y long long respectivamente
(macro de constante)
UCHAR_MAXUSHRT_MAXUINT_MAXULONG_MAXULLONG_MAX
(C99)
valor máximo de unsigned char, unsigned short, unsigned int,
unsigned long y unsigned long long respectivamente
(macro de constante)

[editar] Ejemplo

#include <stdio.h>
#include <limits.h>
 
int main(void)
{   
    printf("CHAR_BIT   = %d\n", CHAR_BIT);
    printf("MB_LEN_MAX = %d\n", MB_LEN_MAX);
    printf("\n");
 
    printf("CHAR_MIN   = %+d\n", CHAR_MIN);
    printf("CHAR_MAX   = %+d\n", CHAR_MAX);
    printf("SCHAR_MIN  = %+d\n", SCHAR_MIN);
    printf("SCHAR_MAX  = %+d\n", SCHAR_MAX);
    printf("UCHAR_MAX  = %u\n",  UCHAR_MAX);
    printf("\n");
 
    printf("SHRT_MIN   = %+d\n", SHRT_MIN);
    printf("SHRT_MAX   = %+d\n", SHRT_MAX);
    printf("USHRT_MAX  = %u\n",  USHRT_MAX);
    printf("\n");
 
    printf("INT_MIN    = %+d\n", INT_MIN);
    printf("INT_MAX    = %+d\n", INT_MAX);
    printf("UINT_MAX   = %u\n",  UINT_MAX);
    printf("\n");
 
    printf("LONG_MIN   = %+ld\n", LONG_MIN);
    printf("LONG_MAX   = %+ld\n", LONG_MAX);
    printf("ULONG_MAX  = %lu\n",  ULONG_MAX);
    printf("\n");
 
    printf("LLONG_MIN  = %+lld\n", LLONG_MIN);
    printf("LLONG_MAX  = %+lld\n", LLONG_MAX);
    printf("ULLONG_MAX = %llu\n",  ULLONG_MAX);
    printf("\n");
}

Posible salida:

CHAR_BIT   = 8
MB_LEN_MAX = 16
 
CHAR_MIN   = -128
CHAR_MAX   = +127
SCHAR_MIN  = -128
SCHAR_MAX  = +127
UCHAR_MAX  = 255
 
SHRT_MIN   = -32768
SHRT_MAX   = +32767
USHRT_MAX  = 65535
 
INT_MIN    = -2147483648
INT_MAX    = +2147483647
UINT_MAX   = 4294967295
 
LONG_MIN   = -9223372036854775808
LONG_MAX   = +9223372036854775807
ULONG_MAX  = 18446744073709551615
 
LLONG_MIN  = -9223372036854775808
LLONG_MAX  = +9223372036854775807
ULLONG_MAX = 18446744073709551615

[editar] Límites de los tipos de punto flotante

Definido en la cabecera <float.h>
FLT_RADIX
la base (radix entero) utilizado por la representación de los tres tipos de punto flotante
(macro de constante)
DECIMAL_DIG
(C99)
conversión de long double a decimal con al menos dos digitos DECIMAL_DIG y de vuelta a long double es la conversión de identidad: esta es la precisión decimal requerida para serializar/deserializar un long double.
(macro de constante)
FLT_DECIMAL_DIGDBL_DECIMAL_DIGLDBL_DECIMAL_DIG
(C11)
conversión de float/double/long double a decimal con al menos FLT_DECIMAL_DIG/DBL_DECIMAL_DIG/LDBL_DECIMAL_DIG dígitos y viceversa es la conversión de identidad: ésta es la precisión decimal necesaria para serializar/deserializar un valor de coma flotante. Definido como mínimo a 6, 10 y 10 respectivamente, o 9 para IEEE float y 17 para IEEE double. (ver también el análogo de C++ max_digits10)
(macro de constante)
FLT_MINDBL_MINLDBL_MIN
valor mínimo de float, double y long double respectivamente
(macro de constante)
FLT_TRUE_MINDBL_TRUE_MINLDBL_TRUE_MIN
(C11)
valor positivo mínimo de float, double y long double respectivamente
(macro de constante)
FLT_MAXDBL_MAXLDBL_MAX
valor máximo de float, double y long double respectivamente
(macro de constante)
FLT_EPSILONDBL_EPSILONLDBL_EPSILON
diferencia entre 1.0 y el siguiente valor representable por float, double y long double respectivamente
(macro de constante)
FLT_DIGDBL_DIGLDBL_DIG
número de dígitos decimales que se garantiza que se conservan en el texto -> float/double/long double -> viaje de ida y vuelta de texto sin cambios por redondeo o desbordamiento (ver también el análogo de C++ digits10 for detail)
(macro de constante)
FLT_MANT_DIGDBL_MANT_DIGLDBL_MANT_DIG
número de dígitos FLT_RADIX de base que se puede representar sin perder precisión para float, double y long double respectivamente
(macro de constante)
FLT_MIN_EXPDBL_MIN_EXPLDBL_MIN_EXP
número entero negativo mínimo, tal que FLT_RADIX elevado por la potencia uno menos que ese número entero es un valor normalizado. float, double and long double respectivamente
(macro de constante)
FLT_MIN_10_EXPDBL_MIN_10_EXPLDBL_MIN_10_EXP
número entero negativo mínimo, tal que 10 elevado por la potencia uno menos que ese número entero es un valor normalizado. float, double and long double respectivamente
(macro de constante)
FLT_MAX_EXPDBL_MAX_EXPLDBL_MAX_EXP
número entero positivo máximo, tal que FLT_RADIX elevado por la potencia uno menos que ese número entero es un valor normalizado. float, double and long double respectivamente
(macro de constante)
FLT_MAX_10_EXPDBL_MAX_10_EXPLDBL_MAX_10_EXP
número entero positivo máximo, tal que 10 elevado por la potencia uno menos que ese número entero es un valor normalizado. float, double and long double respectivamente
(macro de constante)
modo de redondeo de la aritmética de punto flotante, igual a float_round_style
(macro de constante)
uso de la precisión ampliada para resultados intermedios: 0 no se utiliza, se utiliza 1 double en lugar de float, 2: se utiliza long double
(macro de constante)
FLT_HAS_SUBNORMDBL_HAS_SUBNORMLDBL_HAS_SUBNORM
(C11)
si el tipo admite números subnormales (denormales): -1 indeterminable, 0 ausente, 1 presente


si el tipo admite números subnormales: -1 indeterminable, 0 absent, 1 present
(macro de constante)

[editar] Ejemplo

#include <stdio.h>
#include <float.h> 
#include <math.h>
 
int main(void)
{
    printf("FLT_RADIX    = %d\n", FLT_RADIX);
    printf("DECIMAL_DIG  = %d\n", DECIMAL_DIG);
    printf("FLT_MIN      = %e\n", FLT_MIN);
    printf("FLT_MAX      = %e\n", FLT_MAX);
    printf("FLT_EPSILON  = %e\n", FLT_EPSILON);
    printf("FLT_DIG      = %d\n", FLT_DIG);
    printf("FLT_MANT_DIG = %d\n", FLT_MANT_DIG);
    printf("FLT_MIN_EXP  = %d\n",  FLT_MIN_EXP);
    printf("FLT_MIN_10_EXP  = %d\n",  FLT_MIN_10_EXP);
    printf("FLT_MAX_EXP     = %d\n",  FLT_MAX_EXP);
    printf("FLT_MAX_10_EXP  = %d\n",  FLT_MAX_10_EXP);
    printf("FLT_ROUNDS      = %d\n",  FLT_ROUNDS);
    printf("FLT_EVAL_METHOD = %d\n",  FLT_EVAL_METHOD);
    printf("FLT_HAS_SUBNORM = %d\n",  FLT_HAS_SUBNORM);
}

Posible salida:

FLT_RADIX    = 2
DECIMAL_DIG  = 37
FLT_MIN      = 1.175494e-38
FLT_MAX      = 3.402823e+38
FLT_EPSILON  = 1.192093e-07
FLT_DIG      = 6
FLT_MANT_DIG = 24
FLT_MIN_EXP  = -125
FLT_MIN_10_EXP  = -37
FLT_MAX_EXP     = 128
FLT_MAX_10_EXP  = 38
FLT_ROUNDS      = 1
FLT_EVAL_METHOD = 1
FLT_HAS_SUBNORM = 1

[editar] Véase también

Documentación de C++ para Interfaz de límites numéricos de C++