Inicio › Herramientas para desarrolladores › Convertidor de coma flotante IEEE 754

Convertidor de coma flotante IEEE 754

Escribe un número decimal para ver exactamente cómo se almacena como float IEEE 754 de precisión simple (32 bits), doble (64 bits) o media (16 bits). Haz clic en cualquier bit para invertirlo, pega hex o binario para decodificarlo y ve el valor exacto almacenado y el error de redondeo.

Última actualización:

Prueba:
SignoExponente Mantisa Haz clic en un bit para invertirlo
Publicidad
Publicidad

Cómo usar Convertidor de coma flotante IEEE 754

  1. Elige la precisión: simple de 32 bits (float de C), doble de 64 bits (number de JavaScript, double de C) o media de 16 bits.
  2. Ingresa un número decimal como 0.1, -2.5e-8 o 3.14159. Infinity, -0 y NaN también funcionan.
  3. Lee los bits: el signo, el exponente y la mantisa aparecen en colores, y las formas hexadecimal y binaria aparecen debajo.
  4. Revisa el error de redondeo: la herramienta muestra el valor exacto almacenado y cuánto se aleja de lo que escribiste.
  5. Experimenta: haz clic en cualquier bit para invertirlo, pega un patrón hex como 3DCCCCCD o usa los botones ±1 ULP para recorrer los floats vecinos.

Formatos IEEE 754 de un vistazo

Media (binary16)Simple (binary32)Doble (binary64)
Bits totales163264
Signo / exponente / fracción1 / 5 / 101 / 8 / 231 / 11 / 52
Sesgo del exponente151271023
Dígitos decimales significativosunos 3.3unos 7.2unos 15.9
Mayor valor finito65504≈ 3.4028235 × 1038≈ 1.7976931 × 10308
Menor normal positivo≈ 6.10 × 10-5≈ 1.18 × 10-38≈ 2.23 × 10-308
Menor subnormal positivo≈ 5.96 × 10-8≈ 1.40 × 10-45≈ 4.94 × 10-324
Épsilon de máquina (ULP de 1.0)2-10 ≈ 9.77 × 10-42-23 ≈ 1.19 × 10-72-52 ≈ 2.22 × 10-16
Nombres habitualesfloat16, fp16, halffloat, f32, REALdouble, f64, number de JavaScript

Cómo decodificar los bits a mano

Para un número normal, el valor es (-1)signo × 1.fracción × 2exponente − sesgo. Toma 0.1 como float de precisión simple, hex 3DCCCCCD:

  1. Binario: 0 01111011 10011001100110011001101.
  2. Bit de signo 0, así que el número es positivo.
  3. Campo de exponente 01111011 = 123; resta el sesgo 127 para obtener −4.
  4. La fracción con el 1 inicial implícito es 1.100110011001100110011012 ≈ 1.6000000238.
  5. Valor = 1.6000000238 × 2−4 = 0.100000001490116119384765625, que está 1.49 × 10−9 por encima de 0.1.

Patrones especiales: un campo de exponente todo en ceros significa cero o un número subnormal (sin 1 implícito, exponente fijo en 1 − sesgo); todo en unos significa infinito cuando la fracción es cero y NaN en caso contrario.

Valores comunes

ValorSimple (hex)Doble (hex)
1.03F8000003FF0000000000000
0.53F0000003FE0000000000000
0.13DCCCCCD3FB999999999999A
−2.5C0200000C004000000000000
+0 / −000000000 / 800000000000000000000000 / 8000000000000000
+Infinity7F8000007FF0000000000000
NaN (silencioso)7FC000007FF8000000000000

Preguntas frecuentes

¿Por qué 0.1 no es exactamente 0.1 en coma flotante?

0.1 tiene una expansión binaria periódica infinita (0.000110011001100…), igual que 1/3 en decimal, así que debe redondearse al valor más cercano con 24 (simple) o 53 (doble) bits significativos. Como double se almacena exactamente como 0.1000000000000000055511151231257827… (55 dígitos significativos en total), un error de unos 5.55e-18.

¿Cómo se organiza un float de 32 bits?

Un float de precisión simple tiene 1 bit de signo, 8 bits de exponente almacenados con un sesgo de 127 y 23 bits de fracción. Para los números normales, el valor es (-1)^signo × 1.fracción × 2^(exponente - 127). Un double tiene 1 bit de signo, 11 bits de exponente con un sesgo de 1023 y 52 bits de fracción.

¿Qué es la representación hexadecimal de un float?

Son los 32 o 64 bits sin procesar escritos como 8 o 16 dígitos hexadecimales, el más significativo primero. Por ejemplo, 1.0 es 3F800000 como float y 3FF0000000000000 como double, y 0.1 es 3DCCCCCD como float. Es el valor que ves en los volcados de memoria (en orden big-endian) o al usar funciones como Float.floatToIntBits.

¿Qué son los números subnormales (desnormalizados)?

Cuando el campo de exponente es todo ceros, el 1 inicial implícito pasa a ser 0 y el exponente queda fijo en su mínimo, lo que permite que los valores muy pequeños se acerquen gradualmente a cero. El menor subnormal positivo es de unos 1.4e-45 en precisión simple y 4.9e-324 en precisión doble.

¿Cómo funciona el redondeo en IEEE 754?

El modo predeterminado es redondeo al más cercano, con empates al par: el valor exacto se redondea al float representable más cercano y, si está justo a medio camino entre dos floats, se elige aquel cuyo último bit de mantisa es 0. Este convertidor hace ese redondeo con aritmética entera exacta, así que el resultado coincide con lo que produce un compilador correcto o parseFloat.

¿Cuál es la diferencia entre cero positivo y cero negativo?

Solo se diferencian en el bit de signo (00000000 frente a 80000000 en precisión simple). Se comparan como iguales, pero se comportan de forma distinta en algunas operaciones; por ejemplo, 1/+0 es +Infinity y 1/-0 es -Infinity.

¿Qué es un ULP?

Una unidad en el último lugar (ULP) es la distancia entre un float y el siguiente float representable. Crece con el exponente: para doubles cercanos a 1.0 es 2^-52, unos 2.22e-16, que es el conocido épsilon de máquina.

¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?

Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.

Herramientas relacionadas

Ver todas las de Conversores de datos y formatos de archivo →