Cómo se guarda un número en coma flotante
El estándar IEEE 754 escribe cualquier número real en notación científica binaria: (−1)s × 1,m × 2e − sesgo. Se guardan tres campos:
| Formato | Signo | Exponente | Mantisa | Sesgo | Cifras decimales |
|---|---|---|---|---|---|
| Simple (float, binary32) | 1 bit | 8 bits | 23 bits | 127 | ≈ 7 |
| Doble (double, binary64) | 1 bit | 11 bits | 52 bits | 1023 | ≈ 15–16 |
El 1 de delante de la coma no se guarda porque, en un número normalizado, siempre está ahí: es el bit implícito y regala un bit de precisión. El exponente se guarda en exceso (sumándole el sesgo) para que se pueda comparar como un entero sin signo.
Método para convertir a mano
- Apunta el signo y quédate con el valor absoluto.
- Pasa el número a binario: la parte entera por divisiones y la fraccionaria multiplicando por 2 (lo tienes paso a paso en el conversor de bases).
- Normaliza desplazando la coma hasta dejar un único 1 delante. El número de posiciones es el exponente E (positivo si mueves la coma a la izquierda).
- Calcula el exponente almacenado: E + 127 en simple o E + 1023 en doble, y pásalo a binario.
- La mantisa son los bits que hay detrás de la coma, rellenados con ceros o redondeados hasta 23 (o 52).
Ejemplo · −13,375 en precisión simple
13 = 1101 y 0,375 = 0,011, así que 13,375 = 1101,011₂ = 1,101011 × 2³. Signo 1; exponente 3 + 127 = 130 = 10000010; mantisa 10101100000000000000000. Juntando: 1 10000010 10101100000000000000000 = 0xC1560000.
Valores especiales
- Cero: exponente y mantisa a 0. Existen +0 y −0.
- Desnormalizados: exponente a 0 y mantisa distinta de 0. Representan números menores que el mínimo normalizado (≈ 1,18 × 10⁻³⁸ en simple), sin el 1 implícito.
- Infinito: exponente con todos los bits a 1 y mantisa a 0.
- NaN: exponente con todos los bits a 1 y mantisa distinta de 0. Sale de operaciones como 0/0 o √−1.
Por qué 0,1 + 0,2 no es 0,3
0,1 tiene infinitos decimales en binario (0,0001100110011…), así que se guarda redondeado. En doble precisión el valor almacenado es ligeramente mayor que 0,1, igual que el de 0,2, y su suma se queda un poco por encima del double más cercano a 0,3. Por eso en casi cualquier lenguaje 0.1 + 0.2 == 0.3 da falso: no es un fallo del lenguaje, es el formato. Escribe 0,1 arriba y verás el valor exacto que se guarda.
Preguntas frecuentes
¿Cuál es el mayor entero que se representa exacto?
En simple precisión, 224 = 16 777 216: a partir de ahí no todos los enteros caben (prueba 16 777 217, que se redondea). En doble, 253 = 9 007 199 254 740 992, que es el famoso Number.MAX_SAFE_INTEGER + 1 de JavaScript.
¿Cómo se redondea cuando no cabe la mantisa?
Por defecto, al más cercano y, en caso de empate exacto, al que termina en 0 («redondeo al par»). Así el error medio es cero y no se acumula hacia un lado.
¿Qué rango tiene cada formato?
Simple: de ≈ 1,18 × 10⁻³⁸ a ≈ 3,40 × 10³⁸ normalizados (hasta ≈ 1,4 × 10⁻⁴⁵ con desnormalizados). Doble: de ≈ 2,23 × 10⁻³⁰⁸ a ≈ 1,80 × 10³⁰⁸.
Más herramientas de informática
Calculadora de subredes IPv4
Red, broadcast, hosts, wildcard y reparto VLSM con el AND en binario.
AbrirConversor de bases numéricas
Binario, octal, decimal, hexadecimal y bases 2–36 con divisiones sucesivas.
AbrirCalculadora de complemento a 2
Enteros con signo en Ca2, Ca1 y signo-magnitud, y sumas con desbordamiento.
AbrirGenerador de tablas de verdad
Tabla de verdad de cualquier expresión, con minterms y formas canónicas.
AbrirMapas de Karnaugh
Expresión mínima en SOP y POS con los grupos marcados en el mapa.
AbrirVisualizador de algoritmos de ordenación
Seis algoritmos animados, contando comparaciones y escrituras.
Abrir