🧮 Computational Mathematics

Inicio · Parte 00 — Pensamiento matemático desde cero

003 — Fracciones y números racionales

cero-absoluto clase 3 de 20 4 horas demostración rational_arithmetic

Un racional es un cociente exacto de enteros; un decimal es casi siempre una aproximación suya.

Fórmulas

a/b + c/d = (ad + bc)/(bd)
a/b = c/d ⟺ ad = bc

Desarrollo

Los racionales existen porque los enteros no están cerrados bajo división: 1 dividido entre 3 no es un entero. La construcción formal define un racional como una clase de equivalencia de pares de enteros (a, b) con b ≠ 0, donde (a,b) ~ (c,d) si ad = bc. Por eso 2/4 y 1/2 son el mismo número escrito de dos formas.

La consecuencia práctica es la que importa aquí: la fracción es el objeto exacto y el decimal es su sombra. Fraction(1,3) guarda dos enteros y responde con exactitud a cualquier operación; 0.3333 guarda una aproximación y arrastra un error que se acumula. Python distingue las dos cosas: fractions.Fraction implementa la aritmética exacta, y float la aproximada.

El laboratorio de esta clase muestra el caso mínimo donde la diferencia se ve: 1/3 + 1/6 es exactamente 1/2 en aritmética racional, y en punto flotante da un número que parece 0.5 pero cuya igualdad con 0.5 depende de detalles de representación. Aquí conviene resistir la tentación de concluir «los floats están rotos»: no lo están; simplemente no son racionales exactos, y la parte 01 explica por qué.

Un criterio útil para decidir qué usar: si el resultado se va a comparar con ==, o si representa dinero, o si va a alimentar cientos de miles de operaciones encadenadas, la aritmética exacta paga su coste. Si el resultado se va a graficar o alimentar un modelo estadístico, el float es suficiente y mucho más rápido.

Ejemplo trabajado

Sumar un tercio y un sexto por los dos caminos.

Exacto:   1/3 + 1/6 = 2/6 + 1/6 = 3/6 = 1/2
          denominador reducido: 2
          ¿es igual a 1/2? Sí, por construcción.

Flotante: 0.3333333333333333 + 0.16666666666666666
        = 0.5                    (aparentemente)
        ¿es igual a 0.5? depende del redondeo de cada sumando

La lección no es que un camino sea correcto y el otro incorrecto: es que responden preguntas distintas. El exacto responde «¿cuál es el número?»; el flotante responde «¿cuál es el número representable más cercano?».

Qué calcula el laboratorio

Un tercio exacto frente a un tercio en punto flotante.

python classes/part-00-pensamiento-matematico-desde-cero/003-fracciones-y-numeros-racionales/lab.py
compmath run 003

Salidas del laboratorio (6)

Muestra de la ejecución real

{
  "1/3 + 1/6 exacto": "1/2",
  "1/3 + 1/6 float": 0.5,
  "es_igual_a_1/2_exacto": true,
  "es_igual_a_0.5_float": true,
  "error_absoluto": 0.0,
  "denominador_reducido": 2
}

Errores comunes

Dónde se usa

Cualquier cálculo con dinero, con probabilidades exactas o con proporciones de inventario. En la parte 01 (clase 038) la aritmética racional exacta se usa para medir cuánto error acumula la aritmética flotante: la fracción actúa como patrón de referencia contra el que se mide.

Idea rectora de la parte

Proporcionalidad es la primera función lineal que aprendemos sin llamarla así.

Error a evitar

Escribir 1/3 como 0.33 y arrastrar el error a todo el cálculo.

Conexión con IA

Toda métrica de un modelo (accuracy, loss, learning rate) es una razón, un porcentaje o una escala. Interpretarlas mal es el primer error de un practicante de IA.

Bibliografía de la clase

Archivos de la clase