tipos tipo sirve rangos que para operadores long derivados datos dato c floating-point

sirve - Rangos de tipo de datos de coma flotante en C?



unsigned char c (5)

Estoy leyendo un libro C, hablando de rangos de punto flotante, el autor dio la tabla:

No sé de dónde vienen los números de las columnas Positivo más pequeño y Valor más grande.


Es una consecuencia del tamaño de la parte exponente del tipo, como en IEEE 754, por ejemplo. Puede examinar los tamaños con FLT_MAX, FLT_MIN, DBL_MAX, DBL_MIN en float.h.


Estos números provienen del estándar IEEE-754 , que define la representación estándar de los números de coma flotante. El artículo de Wikipedia en el enlace explica cómo llegar a estos rangos sabiendo la cantidad de bits utilizados para los signos, la mantisa y el exponente.


Un número de coma flotante de 32 bits tiene 23 + 1 bits de mantisa y un exponente de 8 bits (sin embargo, se usa -126 a 127), por lo que el número más grande que puede representar es:

(1 + 1 / 2 + ... 1 / (2 ^ 23)) * (2 ^ 127) = (2 ^ 23 + 2 ^ 23 + .... 1) * (2 ^ (127 - 23)) = (2 ^ 24 - 1) * (2 ^ 104) ~= 3.4e38


Los valores para el tipo de datos flotantes provienen de tener 32 bits en total para representar el número asignado de esta manera:

1 bit: bit de signo

8 bits: exponente p

23 bits: mantisa

El exponente se almacena como p + BIAS donde el BIAS es 127, la mantisa tiene 23 bits y un 24º bit oculto que se supone 1. Este bit oculto es el bit más significativo (MSB) de la mantisa y el exponente debe elegirse de manera que es 1.

Esto significa que el número más pequeño que puede representar es 01000000000000000000000000000000 que es 1x2^-126 = 1.17549435E-38 .

El valor más grande es 011111111111111111111111111111111 , la mantisa es 2 * (1 - 1/65536) y el exponente es 127, lo que da (1 - 1 / 65536) * 2 ^ 128 = 3.40277175E38 .

Los mismos principios se aplican a la precisión doble, excepto que los bits son:

1 bit: bit de signo

11 bits: bits de exponente

52 bits: bits de mantisa

SESGO: 1023

Así que, técnicamente, los límites provienen del estándar IEEE-754 para representar números en coma flotante y lo anterior es cómo se producen esos límites


Como dasblinkenlight ya respondió, los números provienen de la forma en que se representan los números de coma flotante en IEEE-754, y Andreas tiene un buen desglose de las matemáticas.

Sin embargo, tenga cuidado de que la precisión de los números de coma flotante no sea exactamente 6 o 15 dígitos decimales significativos, como lo sugiere la tabla, ya que la precisión de los números IEEE-754 depende del número de dígitos binarios significativos.

  • float tiene 24 dígitos binarios significativos, que según el número representado se traduce en 6-8 dígitos decimales de precisión.

  • double tiene 53 dígitos binarios significativos, que son aproximadamente 15 dígitos decimales.

Otra respuesta mía tiene más explicaciones si estás interesado.