Convertidor IEEE 754 de coma flotante
Convierte flotantes decimales a binario y hex IEEE 754: media, simple y doble precisión y bfloat16. Ve el valor exacto almacenado, el error de redondeo y los bits. 100% en tu navegador.
| Signo | |
| Exponente | |
| Mantisa |
- Introdujiste
- Realmente almacenado
- Error de redondeo
- Anterior
- Siguiente
- ULP (tamaño del hueco)
| Formato | Bits totales | Signo | Exponente | Mantisa | Sesgo | Valor finito máximo | Dígitos decimales |
|---|---|---|---|---|---|---|---|
| binary16 (FP16) | 16 | 1 | 5 | 10 | 15 | 65504 | ~3.3 |
| bfloat16 | 16 | 1 | 8 | 7 | 127 | ≈3.39×10³⁸ | ~2.3 |
| binary32 (FP32) | 32 | 1 | 8 | 23 | 127 | ≈3.40×10³⁸ | ~7.2 |
| binary64 (FP64) | 64 | 1 | 11 | 52 | 1023 | ≈1.80×10³⁰⁸ | ~15.9 |
¿Qué es la coma flotante IEEE 754?
IEEE 754 es el estándar que define cómo los ordenadores almacenan números reales en binario. Cada valor se empaqueta en tres campos: un bit de signo, un exponente (almacenado con un sesgo para poder representar tanto magnitudes enormes como diminutas) y una mantisa que contiene los dígitos significativos. Casi todas las CPU, GPU y lenguajes de programación lo usan, y por eso las mismas sorpresas de redondeo aparecen por igual en JavaScript, Python, C y SQL.
La idea clave es que la coma flotante binaria solo puede representar números de la forma m × 2ⁿ. Las fracciones decimales como 0.1 son fracciones periódicas infinitas en base 2 —0.000110011001100…—, así que el formato almacena en su lugar el vecino representable más cercano. En precisión simple ese vecino es 0.100000001490116119384765625; en precisión doble es 0.1000000000000000055511151231257827021181583404541015625. Ninguno de los dos es 0.1. Toda rareza posterior —0.1 + 0.2 ≠ 0.3, sumas que se desvían, comparaciones de igualdad que fallan— se deriva de este único hecho, y este convertidor lo hace visible imprimiendo el valor almacenado exacto en lugar de una aproximación redondeada de vuelta.
El estándar también reserva patrones de bits para los valores especiales. Un exponente todo unos codifica ±Infinity (mantisa cero) o NaN (mantisa distinta de cero); un exponente todo ceros codifica el cero con signo (mantisa cero) o los números subnormales (mantisa distinta de cero), que rellenan el hueco de underflow junto al cero con precisión reducida. Los cuatro formatos que cubre esta herramienta —binary16/FP16, bfloat16, binary32/FP32, binary64/FP64— difieren solo en cuántos bits asignan a cada campo: más bits de exponente significan más rango, más bits de mantisa significan más precisión. bfloat16, el favorito del aprendizaje automático, es simplemente FP32 con los 16 bits inferiores de la mantisa recortados: mismo rango, precisión mucho más gruesa.
Un modelo mental útil es que los flotantes representables forman una cuadrícula sobre la recta numérica cuyo espaciado —una unidad en el último lugar, o ULP— se duplica en cada potencia de dos. Cerca de 1.0 el espaciado de la cuadrícula de un double es de unos 2.22 × 10⁻¹⁶; cerca de 2⁵³ es un entero completo, y por eso los double no pueden contar de forma fiable más allá de 2⁵³. El panel de vecinos de esta herramienta muestra esa cuadrícula directamente: los valores representables anterior y siguiente alrededor de lo que escribas, con la distancia exacta entre ellos.
// Float ↔ hex through the raw IEEE 754 bits (works in any browser / Node.js)
const buf = new DataView(new ArrayBuffer(8));
function floatToHex32(value) {
buf.setFloat32(0, value); // rounds to nearest even
return '0x' + buf.getUint32(0).toString(16).toUpperCase().padStart(8, '0');
}
function hexToFloat32(hex) {
buf.setUint32(0, parseInt(hex, 16));
return buf.getFloat32(0);
}
floatToHex32(0.1); // '0x3DCCCCCD'
floatToHex32(3.14159); // '0x40490FD0'
hexToFloat32('3DCCCCCD'); // 0.10000000149011612 Funciones principales
Cuatro formatos, una sola vista
Media (FP16), bfloat16, Simple (FP32) y Doble (FP64): cambia con un clic y toda la página se recalcula, así que comparar cómo cae el mismo número en cada formato lleva segundos.
Cuadrícula de bits clicable
Cada bit es un botón. Invierte el signo, ajusta el exponente o toca un bit de la mantisa y observa cómo las vistas decimal, hexadecimal y binaria se actualizan al instante: la forma más rápida de ganar intuición sobre la codificación.
Valor almacenado exacto, no una aproximación
La herramienta calcula la expansión decimal completa de los bits almacenados con aritmética exacta de enteros grandes —los 55 dígitos del 0.1 de un double— más el error de redondeo exacto con signo respecto a lo que escribiste.
Vecinos y ULP
Ve los valores representables anterior y siguiente alrededor del número actual y la distancia exacta (ULP) entre ellos: el espaciado de la cuadrícula que determina cuánta precisión tienes realmente en cada magnitud.
Valores especiales a un clic
Los chips cargan ±0, ±Infinity, NaN, el menor subnormal y el mayor valor finito del formato seleccionado, y la insignia de clasificación indica qué codifica el patrón de bits actual.
Enlaces permanentes compartibles, cero subidas
Copiar enlace codifica el formato y el patrón de bits exacto en la URL: ideal para informes de errores, revisiones de código y docencia. Todo se ejecuta en tu navegador; nada de lo que escribes sale de la página.
Ejemplos de conversión IEEE 754
0.1 en precisión simple: el error de redondeo clásico
0.1
0x3DCCCCCD — en realidad se almacena como 0.100000001490116119384765625
El decimal 0.1 no tiene representación binaria finita, así que IEEE 754 almacena en su lugar el valor representable más cercano. En precisión simple (FP32) ese valor es 0x3DCCCCCD, que es exactamente 0.100000001490116119384765625: aproximadamente 1.49 × 10⁻⁹ de más. La herramienta muestra este valor almacenado exacto y el error exacto, dígito a dígito, en lugar del '0.1' redondeado que tu lenguaje de programación te devuelve al imprimir. Este único ejemplo explica la mayoría de las sorpresas de la coma flotante, incluido por qué 0.1 + 0.2 no es igual a 0.3.
Flotante a hex: 3.14159 en FP32
3.14159
0x40490FD0
Escribe 3.14159 con Simple (FP32) seleccionado y el campo hexadecimal mostrará 0x40490FD0: signo 0, exponente sesgado 128 (es decir, 2¹), mantisa 0x490FD0. El valor realmente almacenado es 3.141590118408203125, un pelín por encima de lo que escribiste. La forma hexadecimal es la que ves en capturas de red, búferes de GPU, vistas de registros y archivos binarios serializados, y la conversión funciona en ambos sentidos: pega 40490FD0 en el campo hexadecimal para decodificarlo de vuelta.
Máximo de FP16: 65504 es donde termina la media precisión
65504
0x7BFF — el mayor valor finito de FP16
La media precisión solo tiene 5 bits de exponente y 10 de mantisa, así que su mayor valor finito es 65504 (0x7BFF). Escribe 65520 o cualquier valor mayor y el resultado se redondea a Infinity (0x7C00), un riesgo real al cuantizar modelos de aprendizaje automático a FP16. Cambia a bfloat16 y el mismo 65520 cabe sin problema, porque bfloat16 conserva los 8 bits de exponente de FP32 (rango) a cambio de renunciar a bits de mantisa (precisión). Ese compromiso es exactamente la razón por la que el entrenamiento de ML prefiere bfloat16 y el almacenamiento compacto prefiere FP16.
−0 y +0: dos patrones de bits distintos, un mismo valor
-0
0x80000000 (FP32), mientras que +0 es 0x00000000
IEEE 754 tiene un cero con signo: −0 activa solo el bit de signo (0x80000000 en FP32), mientras que +0 es todo ceros. Se comparan como iguales en todos los lenguajes, y sin embargo 1/−0 es −Infinity y 1/+0 es +Infinity, así que la diferencia es observable. Haz clic en el bit de signo en la herramienta para alternar entre ambos y observa cómo la insignia de clasificación permanece en Cero mientras el hex cambia: una ilustración con un solo clic de por qué la igualdad a nivel de bits y la igualdad numérica son cosas distintas.
Cómo convertir números IEEE 754 de coma flotante
- 1
Elige un formato de coma flotante
Simple (FP32) viene preseleccionado. Cambia a Doble (FP64) para números al estilo de JavaScript/Python, o a Media (FP16) y bfloat16 para los formatos de 16 bits usados en aprendizaje automático y gráficos.
- 2
Escribe un número decimal
Introduce cualquier valor —0.1, -2.5e3, 65504— o usa los chips de valores especiales para ±0, ±Infinity, NaN, el menor subnormal y el mayor valor finito. La conversión ocurre mientras escribes.
- 3
Lee la distribución de bits codificada por colores
El bit de signo, el campo del exponente y la mantisa se resaltan en colores distintos, y la tabla de desglose de campos muestra los bits en bruto, la aritmética del sesgo y el bit inicial implícito.
- 4
Comprueba el valor almacenado exacto y el error
El panel de precisión imprime el valor realmente almacenado —cada dígito, calculado de forma exacta— junto al error de redondeo respecto a lo que escribiste, además de los vecinos representables anterior y siguiente y la distancia en ULP.
- 5
Invierte bits, pega hex, copia resultados
Haz clic en cualquier bit para invertirlo, o pega cadenas hexadecimales (3DCCCCCD) y binarias para decodificarlas de vuelta a decimal. Copia el hex, el binario, el valor exacto o un enlace compartible que reproduce el patrón de bits exacto.
Errores comunes de coma flotante
Fiarse del valor impreso en lugar del almacenado
Los lenguajes imprimen los flotantes redondeados a la cadena más corta que sobrevive al viaje de ida y vuelta, así que 0.1 parece limpio aunque el valor almacenado no lo sea. Juzga la precisión por la expansión exacta, no por lo que muestra print().
print(0.1) # 0.1 — parece exacto, no lo es
0.1 almacenado (FP64) = 0.1000000000000000055511151231257827021181583404541015625
Comparar flotantes por igualdad exacta
0.1 + 0.2 cae en el patrón de bits 0x3FD3333333333334 mientras que el literal 0.3 es 0x3FD3333333333333: a un ULP de distancia, así que == es falso aunque ambos se impriman como valores cercanos a 0.3.
if (0.1 + 0.2 === 0.3) { … } // nunca se ejecuta if (Math.abs(a - b) < 1e-9) { … } // tolerancia ajustada a tus datos Cuantizar a FP16 sin comprobar el rango
El mayor valor finito de FP16 es 65504. Cualquier cosa mayor se convierte en Infinity, y una vez que un Infinity entra en un cálculo, se propaga. Comprueba tus máximos antes de reducir la precisión, o usa bfloat16, que conserva el rango de FP32.
fp16(65520) → Infinity (0x7C00) — desbordamiento silencioso
bf16(65520) → finito (bfloat16 conserva 8 bits de exponente)
Comprobar NaN con igualdad
NaN es el único valor que no es igual a sí mismo; es así por diseño, para que un cálculo fallido no pueda hacerse pasar por un número real. Usa la comprobación isNaN de tu lenguaje en lugar de ==, y recuerda que existen millones de patrones de bits NaN distintos.
if (x === NaN) { … } // siempre falso, incluso cuando x ES NaN if (Number.isNaN(x)) { … } // la comprobación correcta Qué puedes hacer con el convertidor IEEE 754
- Depura datos binarios serializados
- Pega el hex que encontraste en una captura de red, un búfer de GPU, un volcado de registros o un formato de archivo y decodifícalo al valor decimal exacto, o ve en sentido contrario para escribir fixtures de prueba. Nota sobre el orden de bytes: el hex mostrado es el patrón de bits big-endian; si tu volcado es little-endian, invierte el orden de bytes antes de pegarlo.
- Entiende la cuantización en ML
- Comprueba si tus valores sobreviven al techo de 65504 de FP16, compara la pérdida de precisión de FP16 frente a bfloat16 dígito a dígito e inspecciona el rango subnormal donde los gradientes sufren underflow.
- Explica un bug de coma flotante
- Cuando un colega pregunte por qué difieren dos números 'iguales', envíale un enlace permanente que muestre ambos patrones de bits y los valores almacenados exactos: la discusión se resuelve sola. Combínalo con la herramienta de diferencias de texto para volcados más largos.
- Aprende o enseña la codificación
- Las asignaturas de arquitectura de computadores se vuelven concretas cuando los estudiantes pueden hacer clic en los bits del exponente y ver actualizarse la aritmética del sesgo. La tabla de desglose de campos refleja cómo dibujan el formato los libros de texto.
- Decodifica registros embebidos e industriales
- Las cargas útiles de Modbus, CAN y sensores suelen transportar valores FP32 como palabras hex en bruto. Pega aquí la palabra para leer el valor físico sin escribir un script improvisado.
Formatos IEEE 754 y valores especiales
- Los cuatro formatos binarios de un vistazo
- binary16 (FP16): 1 bit de signo + 5 de exponente + 10 de mantisa, sesgo 15, máximo 65504, ~3.3 dígitos decimales. bfloat16: 1 + 8 + 7, sesgo 127, máximo ≈ 3.39 × 10³⁸, ~2.3 dígitos. binary32 (FP32): 1 + 8 + 23, sesgo 127, máximo ≈ 3.40 × 10³⁸, ~7.2 dígitos. binary64 (FP64): 1 + 11 + 52, sesgo 1023, máximo ≈ 1.80 × 10³⁰⁸, ~15.9 dígitos. El patrón: los bits de exponente compran rango, los bits de mantisa compran precisión, y bfloat16 cambia deliberadamente toda su precisión por el rango de FP32.
- Cómo se ensambla un valor
- Un número normal se decodifica como (−1)^signo × 1.mantisa × 2^(exponente − sesgo). El 1 inicial es implícito —no se almacena—, y por eso un campo de mantisa de 23 bits ofrece 24 bits de precisión. El exponente almacenado es el exponente real más el sesgo (127 en FP32), así que 2⁰ se almacena como 01111111. La tabla de desglose de campos de esta herramienta muestra cada paso de esa aritmética para el valor actual.
- Valores especiales: los patrones de exponente reservados
- Un exponente todo unos con mantisa cero es ±Infinity; con cualquier mantisa distinta de cero es NaN (el NaN silencioso canónico activa el bit superior de la mantisa). Un exponente todo ceros con mantisa cero es ±0; con mantisa distinta de cero es un subnormal, decodificado como 0.mantisa × 2^(1 − sesgo), sin 1 inicial implícito. Estas reglas son idénticas en los cuatro formatos, y por eso los mismos chips funcionan en todos.
- Redondeo: al más cercano, empates al par
- Cuando un valor cae entre dos números representables, el modo por defecto de IEEE 754 redondea al más cercano; en un empate exacto elige el que tiene el último bit de mantisa a 0 (empates al par), lo que evita una deriva sistemática. Este convertidor aplica exactamente esa regla al estrechar tu entrada decimal al formato de destino, y el panel de error muestra la diferencia con signo resultante de forma exacta.
- ULP: el espaciado de la cuadrícula de los flotantes
- Los flotantes representables no están repartidos de manera uniforme: la distancia entre vecinos (una unidad en el último lugar) se duplica en cada potencia de dos. Cerca de 1.0 el ULP de un double es 2⁻⁵² ≈ 2.22 × 10⁻¹⁶; cerca de 2⁵³ el ULP alcanza 1.0 y los enteros empiezan a saltarse. El panel de vecinos imprime el ULP actual de forma exacta, que es la respuesta honesta a «¿cuán preciso es mi número aquí?».
Buenas prácticas de coma flotante
- Nunca compares flotantes con ==
- Tras cualquier operación aritmética, dos expresiones matemáticamente iguales pueden quedar a un ULP de distancia. Compara contra una tolerancia adecuada a tus magnitudes, o cuenta los ULP entre los patrones de bits, que esta herramienta te permite inspeccionar directamente.
- Mantén el dinero fuera de los flotantes binarios
- Ninguna cuadrícula de potencias de dos contiene 0.10 exactamente, así que las divisas en flotantes acumulan errores visibles. Usa céntimos enteros o un tipo decimal; el panel de valor almacenado exacto de esta herramienta es la prueba permanente del porqué.
- Elige el formato de 16 bits por rango, no por costumbre
- Si tus valores pueden superar 65504 —pérdidas, gradientes, picos físicos—, FP16 se desbordará a Infinity donde bfloat16 sigue funcionando. Si todo está normalizado en una banda estrecha, los bits extra de mantisa de FP16 dan una precisión visiblemente mejor.
- Cuidado con la trampa del doble redondeo al estrechar
- Convertir decimal → double → half puede caer a un ULP de distancia de convertir decimal → half directamente en raros casos intermedios. Esta herramienta redondea tu entrada decimal al formato de destino en un solo paso, así que lo que ves es la respuesta IEEE 754 honesta.
- Espera que los enteros se rompan por encima de 2⁵³
- Un double almacena exactamente todos los enteros hasta 2⁵³ y a partir de ahí empieza a saltárselos: 2⁵³ + 1 no es representable. Si manejas IDs o contadores cerca de esa escala, usa enteros de 64 bits o cadenas, y comprueba aquí los valores sospechosos a nivel de bits.
Preguntas frecuentes sobre el convertidor IEEE 754
¿Por qué 0.1 + 0.2 no es igual a 0.3?
¿Qué es IEEE 754?
¿Cuál es la diferencia entre FP16 y bfloat16?
¿Qué son los números subnormales (denormales)?
¿Debería usar float o double?
¿Cómo convierto un flotante a hexadecimal a mano?
¿Se suben mis datos cuando uso este convertidor?
Herramientas relacionadas
Ver todas las herramientas →Conversor de Bases — Binario, Hex, Decimal, Octal
Herramientas de Conversión
Convierte números entre binario, hexadecimal, decimal, octal y cualquier base personalizada (2-36) al instante. Gratis, privado, sin registro — todo el procesamiento ocurre en tu navegador.
Convertidor de Color — HEX, RGB, HSL y OKLCH
Herramientas de Conversión
Convierta HEX a RGB, HSL, OKLCH, OKLAB y CMYK en su navegador — copie cualquier formato con un clic. Gratis, sin registro, sus colores nunca salen de la página.
Convertidor HEX a CMYK
Herramientas de Conversión
Convierta colores HEX a CMYK en su navegador. Aproximación ingenua basada en sRGB para vistas previas de imprenta. Gratis, sin registro, sus colores nunca salen de la página.
Convertidor HEX a HSL
Herramientas de Conversión
Convierta cualquier color hex a HSL en su navegador — admite hex de 3 dígitos, 6 dígitos y 8 dígitos con alfa. Gratis, instantáneo, sin registro, sus colores nunca salen de la página.
Convertidor HEX a OKLCH
Herramientas de Conversión
Convierta HEX a OKLCH para tokens de diseño de Tailwind v4. Salida perceptualmente uniforme en vivo con avisos de gama Display P3. Gratis, solo en el navegador.
Convertidor HEX a RGB
Herramientas de Conversión
Convierta cualquier código de color hex a RGB en su navegador — admite hex de 3 dígitos, 6 dígitos y 8 dígitos con alfa. Gratis, instantáneo, sin registro, sus colores nunca salen de la página.