🧮 Computational Mathematics

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

026 — Rango, overflow y wraparound

basico-computacional clase 6 de 20 4 horas demostración overflow_wraparound

En ancho fijo, superar el máximo no lanza excepción: el valor da la vuelta al rango.

Fórmulas

resultado = (a + b) mod 2ⁿ, reinterpretado con signo
int8: 127 + 1 = −128

Desarrollo

El desbordamiento en enteros de ancho fijo es silencioso por diseño: el hardware calcula módulo 2ⁿ y descarta los bits que sobran. No hay excepción, no hay aviso, y el programa continúa con un valor que puede tener el signo contrario al esperado. Es una de las pocas situaciones en computación donde un error grave no produce ninguna señal.

Python es la excepción cómoda: sus enteros crecen indefinidamente, limitados solo por la memoria. Esa comodidad esconde el problema hasta que el mismo cálculo pasa a NumPy (donde int32 sí desborda), a una base de datos, a un servicio en otro lenguaje o a un modelo cuantizado. La lección de esta clase es que la ausencia de desbordamiento en Python no es una propiedad del algoritmo: es una propiedad del intérprete.

Los casos históricos abundan. El vuelo inaugural del Ariane 5 en 1996 se destruyó por una conversión de un flotante de 64 bits a un entero con signo de 16 bits cuyo valor no cabía. El «problema del año 2038» es el desbordamiento de un time_t de 32 bits contando segundos desde 1970.

La defensa práctica tiene tres capas: elegir el ancho con margen sobre el rango real, validar los límites en las fronteras del sistema, y usar tipos con detección de desbordamiento donde el lenguaje los ofrezca (checked_add en Rust, -ftrapv en C).

Ejemplo trabajado

Wraparound en int8 simulado sobre Python.

máximo int8            127
127 + 1  →  wraparound  −128       (no 128)
127 + 2  →  wraparound  −127

En Python nativo:
127 + 1 = 128                       (int ilimitado)
sys.maxsize = 9223372036854775807   (tamaño del puntero, no un límite del int)

Lección: Python no desborda, C y NumPy sí.
El algoritmo es el mismo; el resultado, no.

Qué calcula el laboratorio

Wraparound en enteros de ancho fijo simulado sobre Python.

python classes/part-01-aritmetica-computacional-y-representacion-numerica/026-rango-overflow-y-wraparound/lab.py
compmath run 026

Salidas del laboratorio (6)

Muestra de la ejecución real

{
  "maximo_int8": 127,
  "maximo+1_con_wraparound": -128,
  "maximo+2_con_wraparound": -127,
  "python_int_es_ilimitado": 128,
  "sys_maxsize": 9223372036854775807,
  "leccion": "Python no desborda, C/NumPy sí"
}

Errores comunes

Dónde se usa

Contadores, marcas de tiempo, identificadores, acumuladores de métricas y cualquier dato que cruza la frontera entre Python y un sistema de ancho fijo. Es una categoría reconocida de vulnerabilidad de seguridad.

Idea rectora de la parte

Un float es un racional binario de precisión finita, no un número real.

Error a evitar

Usar float para dinero en vez de Decimal o enteros de centavos.

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