🧮 Computational Mathematics

Inicio · Parte 01

Aritmética computacional y representación numérica

basico-computacional 20 clases 80 horas estimadas motor part01

Qué es realmente un número dentro de una máquina: bits, complemento a dos, IEEE 754, error, condicionamiento y estabilidad.

Panorama de la parte

Esta es la parte que más cambia la forma de programar de quien la estudia, y la que casi ningún curso de matemáticas incluye. La pregunta central es incómoda: ¿qué es realmente un número dentro de una máquina? La respuesta —una cadena finita de bits con una interpretación acordada— tiene consecuencias que aparecen en producción a las tres de la mañana.

El recorrido va de lo discreto a lo continuo. Las clases 021 a 026 tratan los enteros: cuántos valores caben en un ancho de palabra, cómo se representan los negativos con complemento a dos y qué ocurre cuando una suma se sale del rango. Python oculta este problema porque sus enteros son de precisión arbitraria, pero NumPy, C, Rust y cualquier base de datos no lo hacen, y el desbordamiento silencioso es un error de seguridad clásico.

Las clases 027 a 033 son el núcleo: IEEE 754. Un float64 no es un número real: es un racional binario con 53 bits de mantisa. De ahí se derivan, con necesidad lógica, los fenómenos que parecen fallos y no lo son: 0.1 + 0.2 != 0.3, la suma que deja de ser asociativa, el epsilon de máquina, los subnormales y el NaN. Goldberg escribió en 1991 el artículo que sigue siendo la referencia; esta parte es su versión ejecutable.

Las clases 034 a 036 introducen la distinción que separa a quien depura numéricamente de quien adivina: condicionamiento es una propiedad del problema, estabilidad es una propiedad del algoritmo. Un problema mal condicionado no tiene algoritmo estable que lo salve; un algoritmo inestable estropea un problema bien condicionado. Confundirlos lleva a buscar el error en el sitio equivocado.

El cierre (037 a 039) da las salidas: Decimal cuando hace falta exactitud decimal, Fraction cuando hace falta exactitud racional, y las condiciones bajo las que un resultado numérico es reproducible entre máquinas. El capstone construye un auditor que mide cuántos dígitos significativos pierde cada forma de escribir una expresión.

En IA esta parte es cotidiana aunque nadie la nombre: float32, bfloat16, la cuantización a int8, los NaN que aparecen en la época 3, el epsilon dentro de cada LayerNorm y el motivo por el que dos entrenamientos con la misma semilla dan resultados distintos en GPU. Todo eso es esta parte.

Recorrido de la parte

Ideas centrales

Por qué importa en 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.

Errores frecuentes

Secuencia de clases

#ClaseDemostración ejecutable
021 Bits, bytes y sistemas de numeración bits_and_bytes
022 Conversión decimal a binario decimal_to_binary
023 Binario, octal y hexadecimal bases
024 Aritmética binaria binary_arithmetic
025 Enteros con signo y complemento a dos twos_complement
026 Rango, overflow y wraparound overflow_wraparound
027 Punto fijo frente a punto flotante fixed_vs_floating
028 IEEE 754: estructura de un float ieee754_layout
029 Por qué 0.1 + 0.2 no es exactamente 0.3 why_point_one
030 Error absoluto y error relativo absolute_relative_error
031 ULP y machine epsilon ulp_epsilon
032 Cancelación catastrófica catastrophic_cancellation
033 Overflow y underflow flotante float_overflow_underflow
034 Propagación de errores error_propagation
035 Condicionamiento de problemas conditioning
036 Estabilidad de algoritmos stability
037 Precisión arbitraria y Decimal arbitrary_precision
038 Racional exacto y Fraction exact_rationals
039 Reproducibilidad numérica entre plataformas reproducibility
040 Capstone: auditor de precisión numérica capstone_precision_auditor

Ejecutar la parte completa

compmath run --part 01

Glosario de la parte (18 términos)

TérminoDefiniciónClase
Bit Unidad mínima de información: dos estados posibles. n bits codifican 2ⁿ valores distintos. 021
Base posicional Sistema en el que el valor de un dígito depende de su posición. Cambiar de base no cambia la cantidad, solo su escritura. 023
Complemento a dos Codificación de enteros con signo en la que el negativo de x es 2ⁿ − x. Permite sumar positivos y negativos con el mismo circuito. 025
Overflow Resultado que excede el rango representable. En ancho fijo produce wraparound silencioso, no una excepción. 026
Punto fijo Representación con número fijo de decimales, típicamente enteros de la unidad mínima (centavos). Exacta dentro de su rango. 027
Mantisa Parte significativa de un número en punto flotante. Determina la precisión relativa, no el rango. 028
Exponente sesgado Exponente almacenado con un desplazamiento (1023 en float64) para poder representarlo sin signo. 028
Error absoluto Diferencia |aproximado − exacto|. Depende de la escala y no es comparable entre magnitudes distintas. 030
Error relativo Error absoluto dividido por el valor exacto. Es la magnitud que se propaga y la que define la precisión. 030
ULP Unit in the Last Place: distancia entre un float y su vecino. Depende de la magnitud del número. 031
Epsilon de máquina Menor ε tal que 1 + ε ≠ 1. En float64 vale 2⁻⁵² ≈ 2.22e−16. 031
Cancelación catastrófica Pérdida masiva de dígitos significativos al restar dos números casi iguales. No lanza excepción. 032
Subnormal Número flotante menor que el mínimo normal, representado con mantisa desnormalizada y precisión reducida. 033
Suma compensada Técnica (Kahan, o math.fsum) que arrastra el error de redondeo para que la suma de muchos términos conserve precisión. 034
Número de condición Factor por el que un problema amplifica el error relativo de la entrada. Es propiedad del problema. 035
Estabilidad numérica Propiedad de un algoritmo que no amplifica los errores de redondeo más allá de lo que el problema exige. 036
Precisión arbitraria Aritmética cuya precisión se declara y no está limitada por el hardware, a cambio de velocidad. 037
Reproducibilidad numérica Propiedad de un cálculo que devuelve bit a bit el mismo resultado. Exige fijar el orden de las operaciones, no solo la semilla. 039

Bibliografía

Ver el motor en GitHub