Biblioteca estándar de C -<float.h>
Introducción
<float.h>es un archivo de cabecera de la biblioteca estándar de C que define macros relacionadas con los tipos de punto flotante (float、doubleylong double). Estas macros proporcionan las características y limitaciones de los números de punto flotante, como el valor máximo, el valor mínimo, la precisión, etc.
El archivo de cabecera de la biblioteca estándar de Cfloat.hcontiene un conjunto de constantes dependientes de la plataforma relacionadas con los valores de punto flotante. Estas constantes fueron propuestas por ANSI C, lo que hace que los programas sean más portables. Antes de explicar estas constantes, es mejor aclarar primero que un número de punto flotante se compone de los siguientes cuatro elementos:
| Componente | Descripción del componente |
|---|---|
| S | Signo ( +/- ) |
| b | Base del exponente, 2 para binario, 10 para decimal, 16 para hexadecimal, etc... |
| e | Exponente, un entero entre el valor mínimoeminy el valor máximoemax. |
| p | Precisión, el número de dígitos significativos en la base b |
Basándose en los 4 componentes anteriores, el valor de un número de punto flotante es el siguiente:
floating-point = ( S ) p x be
o
floating-point = (+/-) precision x baseexponent
Macros de la biblioteca
Los siguientes valores son específicos de la implementación y se definen mediante la directiva #define. Estos valores no deben ser inferiores a los valores que se indican a continuación. Tenga en cuenta que en todos los casos, FLT se refiere al tipo float, DBL al tipo double y LDBL al tipo long double.
Número de punto flotante de precisión simple (float)
FLT_RADIX: la base del número de punto flotante (generalmente 2).FLT_MANT_DIG:floatEl número de dígitos significativos del tipo.FLT_DIG:floatLa precisión decimal del tipo, es decir, el número máximo de dígitos decimales que se pueden representar sin pérdida de precisión.FLT_MIN_EXP:floatEl exponente negativo mínimo del tipo (en la base).FLT_MIN_10_EXP:floatEl exponente decimal negativo mínimo del tipo.FLT_MAX_EXP:floatEl exponente máximo del tipo (en la base).FLT_MAX_10_EXP:floatEl exponente decimal máximo del tipo.FLT_MAX:floatEl valor positivo máximo del tipo.FLT_MIN:floatEl valor positivo mínimo del tipo.FLT_EPSILON:floatEl error relativo del tipo, es decir, la diferencia entre 1.0 y el número de punto flotante más pequeño mayor que 1.0.
Número de punto flotante de doble precisión (double)
DBL_MANT_DIG:doubleEl número de dígitos significativos del tipo.DBL_DIG:doubleLa precisión decimal del tipo.DBL_MIN_EXP:doubleEl exponente negativo mínimo del tipo (en la base).DBL_MIN_10_EXP:doubleEl exponente decimal negativo mínimo del tipo.DBL_MAX_EXP:doubleEl exponente máximo del tipo (en la base).DBL_MAX_10_EXP:doubleEl exponente decimal máximo del tipo.DBL_MAX:doubleEl valor positivo máximo del tipo.DBL_MIN:doubleEl valor positivo mínimo del tipo.DBL_EPSILON:doubleEl error relativo del tipo.
Número de punto flotante de precisión extendida (long double)
LDBL_MANT_DIG:long doubleEl número de dígitos significativos del tipo.LDBL_DIG:long doubleLa precisión decimal del tipo.LDBL_MIN_EXP:long doubleEl exponente negativo mínimo del tipo (en la base).LDBL_MIN_10_EXP:long doubleEl exponente decimal negativo mínimo del tipo.LDBL_MAX_EXP:long doubleEl exponente máximo del tipo (en la base).LDBL_MAX_10_EXP:long doubleEl exponente decimal máximo del tipo.LDBL_MAX:long doubleEl valor positivo máximo del tipo.LDBL_MIN:long doubleEl valor positivo mínimo del tipo.LDBL_EPSILON:long doubleEl error relativo del tipo.
Ejemplo
El siguiente ejemplo demuestra el uso de algunas de las constantes definidas en el archivo float.h.
Ejemplo
#include <float.h>
int main() {
printf("Single precision (float):\n");
printf("FLT_RADIX: %d\n", FLT_RADIX);
printf("FLT_MANT_DIG: %d\n", FLT_MANT_DIG);
printf("FLT_DIG: %d\n", FLT_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_MAX: %e\n", FLT_MAX);
printf("FLT_MIN: %e\n", FLT_MIN);
printf("FLT_EPSILON: %e\n", FLT_EPSILON);
printf("\nDouble precision (double):\n");
printf("DBL_MANT_DIG: %d\n", DBL_MANT_DIG);
printf("DBL_DIG: %d\n", DBL_DIG);
printf("DBL_MIN_EXP: %d\n", DBL_MIN_EXP);
printf("DBL_MIN_10_EXP: %d\n", DBL_MIN_10_EXP);
printf("DBL_MAX_EXP: %d\n", DBL_MAX_EXP);
printf("DBL_MAX_10_EXP: %d\n", DBL_MAX_10_EXP);
printf("DBL_MAX: %e\n", DBL_MAX);
printf("DBL_MIN: %e\n", DBL_MIN);
printf("DBL_EPSILON: %e\n", DBL_EPSILON);
printf("\nExtended precision (long double):\n");
printf("LDBL_MANT_DIG: %d\n", LDBL_MANT_DIG);
printf("LDBL_DIG: %d\n", LDBL_DIG);
printf("LDBL_MIN_EXP: %d\n", LDBL_MIN_EXP);
printf("LDBL_MIN_10_EXP: %d\n", LDBL_MIN_10_EXP);
printf("LDBL_MAX_EXP: %d\n", LDBL_MAX_EXP);
printf("LDBL_MAX_10_EXP: %d\n", LDBL_MAX_10_EXP);
printf("LDBL_MAX: %Le\n", LDBL_MAX);
printf("LDBL_MIN: %Le\n", LDBL_MIN);
printf("LDBL_EPSILON: %Le\n", LDBL_EPSILON);
return 0;
}
Compilemos y ejecutemos el programa anterior, lo que producirá el siguiente resultado:
Single precision (float): FLT_RADIX: 2 FLT_MANT_DIG: 24 FLT_DIG: 6 FLT_MIN_EXP: -125 FLT_MIN_10_EXP: -37 FLT_MAX_EXP: 128 FLT_MAX_10_EXP: 38 FLT_MAX: 3.402823e+38 FLT_MIN: 1.175494e-38 FLT_EPSILON: 1.192093e-07 Double precision (double): DBL_MANT_DIG: 53 DBL_DIG: 15 DBL_MIN_EXP: -1021 DBL_MIN_10_EXP: -307 DBL_MAX_EXP: 1024 DBL_MAX_10_EXP: 308 DBL_MAX: 1.797693e+308 DBL_MIN: 2.225074e-308 DBL_EPSILON: 2.220446e-16 Extended precision (long double): LDBL_MANT_DIG: 64 LDBL_DIG: 18 LDBL_MIN_EXP: -16381 LDBL_MIN_10_EXP: -4931 LDBL_MAX_EXP: 16384 LDBL_MAX_10_EXP: 4932 LDBL_MAX: 1.189731e+4932 LDBL_MIN: 3.362103e-4932 LDBL_EPSILON: 1.084202e-19
<float.h>Proporciona un conjunto de macros para describir las características y limitaciones de los tipos de punto flotante. Al usar estas macros, podemos escribir código más robusto y manejar casos límite y situaciones especiales relacionados con los números de punto flotante.