🧮 Computational Mathematics

Inicio · Parte 01 — Aritmética computacional y representación numérica

028 — IEEE 754: estructura de un float

basico-computacional clase 8 de 20 4 horas demostración ieee754_layout

Un float64 es signo, exponente sesgado de 11 bits y mantisa de 52 bits con un 1 implícito.

Fórmulas

valor = (−1)^s · (1 + m/2⁵²) · 2^(e − 1023)
float64: 1 bit de signo + 11 de exponente + 52 de mantisa = 64

Desarrollo

El estándar IEEE 754, publicado en 1985 y revisado en 2019, unificó lo que antes era un caos de formatos incompatibles entre fabricantes. Su diseño responde a una idea: guardar un número en notación científica binaria, con la mantisa normalizada al intervalo [1, 2) para que el primer bit sea siempre 1 y no haga falta almacenarlo. Ese «bit implícito» regala un bit de precisión gratis.

Los tres campos tienen papeles distintos. El signo es un bit. El exponente se guarda sesgado (sumándole 1023 en float64) para poder representar exponentes negativos sin necesitar un signo propio; con 11 bits cubre de 2⁻¹⁰²² a 2¹⁰²³, es decir de 10⁻³⁰⁸ a 10³⁰⁸ aproximadamente. La mantisa de 52 bits (más el implícito, 53 efectivos) determina la precisión: log₁₀(2⁵³) ≈ 15.95 dígitos decimales.

Los valores extremos del exponente están reservados: todo ceros indica cero o subnormal, todo unos indica infinito o NaN. Por eso existen +inf, -inf y NaN como valores de primera clase en lugar de como errores, lo que permite que un cálculo continúe y el problema se detecte al final.

Reconstruir un float a mano desde sus bits, como hace el laboratorio, deja claro que no hay nada mágico: es notación científica en base 2 con un formato de empaquetado acordado. Y explica de inmediato por qué la precisión es relativa: los 53 bits de mantisa siempre representan los mismos dígitos significativos, sea cual sea el exponente.

Ejemplo trabajado

Descomponer −6.25 en float64.

−6.25 en binario = −110.01₂ = −1.1001₂ × 2²

signo    s = 1                        (negativo)
exponente e = 2 + 1023 = 1025 = 10000000001₂
mantisa   m = 1001000...0   (el 1 inicial es implícito)

Reconstrucción:
  (−1)¹ · (1 + m/2⁵²) · 2^(1025−1023)
= −1 · 1.5625 · 4
= −6.25   ✓

Precisión: 53 bits ⇒ log₁₀(2⁵³) ≈ 15.95 dígitos decimales
Rango:     exponente de −1022 a 1023 ⇒ ~1e−308 a ~1e308

Qué calcula el laboratorio

Signo, exponente y mantisa de un float64.

python classes/part-01-aritmetica-computacional-y-representacion-numerica/028-ieee-754-estructura-de-un-float/lab.py
compmath run 028

Salidas del laboratorio (8)

Muestra de la ejecución real

{
  "valor": -6.25,
  "bits": "1100000000011001000000000000000000000000000000000000000000000000",
  "signo": "1",
  "exponente_bruto": 1025,
  "sesgo": 1023,
  "exponente_real": 2
}

Errores comunes

Dónde se usa

Es el formato de casi todo cálculo científico. Entenderlo explica float32 (24 bits de mantisa), bfloat16 (8 bits de mantisa pero el mismo rango que float32, por eso se usa en entrenamiento) y float16 (10 bits, rango reducido).

Idea rectora de la parte

Condicionamiento es del problema; estabilidad es del algoritmo.

Error a evitar

Suponer que la suma de floats es asociativa.

Conexión con IA

float32, bfloat16 y la cuantización a int8 son decisiones de representación. Los NaN en un entrenamiento casi siempre nacen aquí, no en la arquitectura.

Bibliografía de la clase

Archivos de la clase