🧮 Computational Mathematics

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

027 — Punto fijo frente a punto flotante

basico-computacional clase 7 de 20 4 horas demostración fixed_vs_floating

El punto fijo reparte la precisión de forma uniforme; el flotante la reparte proporcionalmente a la magnitud.

Fórmulas

punto fijo: valor = entero · 10⁻ᵏ (exacto en su rango)
punto flotante: valor = mantisa · 2^exponente (precisión relativa constante)

Desarrollo

Las dos representaciones responden a necesidades distintas. En punto fijo se guarda un entero y se acuerda dónde está la coma: el dinero se guarda en centavos, y todas las operaciones son aritmética entera exacta. El espaciado entre valores representables es constante —un centavo— en todo el rango.

En punto flotante se guarda una mantisa y un exponente, y el espaciado crece con la magnitud: cerca de 1 los floats están separados por unos 2⁻⁵², y cerca de 10⁶ por unos 2⁻³². Eso significa precisión relativa constante: siempre unos 16 dígitos significativos, independientemente de la escala. Es la elección correcta para magnitudes físicas que abarcan muchos órdenes de magnitud.

La consecuencia para dinero es directa y conocida: sumar 0.1 diez veces en float no da exactamente 1.0, porque 0.1 no es representable en binario. Sumar 10 veces el entero 10 (centavos) da exactamente 100. Por eso todo sistema contable serio trabaja en punto fijo o con Decimal.

El criterio para elegir: si los valores tienen una unidad mínima natural y las comparaciones exactas importan (dinero, contadores, índices), punto fijo. Si los valores abarcan varios órdenes de magnitud y lo que importa es la precisión relativa (física, estadística, gradientes), punto flotante.

Ejemplo trabajado

Sumar diez veces una décima por los dos caminos.

Punto flotante:
  0.0 + 0.1 repetido 10 veces = 0.9999999999999999
  ¿es exactamente 1.0?  No
  error = 1.11e−16

Punto fijo (centavos como enteros):
  0 + 10 repetido 10 veces = 100
  100 / 100 = 1.0
  exacto: sí, porque toda la aritmética fue entera

El error del flotante es minúsculo. El problema no es su tamaño: es que rompe la comparación total == 1.0, que es exactamente la que hace un sistema de facturación.

Qué calcula el laboratorio

Punto fijo (centavos enteros) frente a punto flotante.

python classes/part-01-aritmetica-computacional-y-representacion-numerica/027-punto-fijo-frente-a-punto-flotante/lab.py
compmath run 027

Salidas del laboratorio (6)

Muestra de la ejecución real

{
  "suma_float_de_0.1_x10": 0.9999999999999999,
  "es_exactamente_1.0": false,
  "error": 1.1102230246251565e-16,
  "suma_en_centavos_enteros": 100,
  "centavos_a_unidades": 1.0,
  "punto_fijo_exacto": true
}

Errores comunes

Dónde se usa

Contabilidad, facturación e inventario en punto fijo; física, estadística y deep learning en punto flotante. La cuantización de modelos a int8 es una vuelta al punto fijo por razones de memoria.

Idea rectora de la parte

El error relativo, no el absoluto, es la magnitud que se propaga.

Error a evitar

Comparar floats con `==` en lugar de una tolerancia razonada.

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