Inicio · Parte 01 — Aritmética computacional y representación numérica
Fraction(1,3) + Fraction(1,6) == Fraction(1,2) → exacto
H_n = Σ 1/k (número armónico)
Fraction representa un racional como un par de enteros de precisión arbitraria en forma reducida. Toda operación —suma, producto, comparación— es exacta, sin excepciones y sin necesidad de declarar precisión. Es la aritmética más fiel que ofrece la biblioteca estándar.
Su papel en este programa no es sustituir al float en cálculo real: es servir de patrón de referencia. Para medir cuánto error comete un cálculo en punto flotante hace falta conocer el valor exacto, y Fraction lo proporciona en cualquier expresión que solo use operaciones racionales. El laboratorio calcula el número armónico H₁₀ por ambos caminos y compara.
El coste es de crecimiento: los denominadores se multiplican y crecen muy rápido. H₁₀ ya tiene denominador 2520, y H₁₀₀ tiene cientos de dígitos. Para cálculos largos, la aritmética exacta deja de ser viable no por lentitud de cada operación sino por el tamaño de los números.
Una utilidad práctica: Fraction(0.1) muestra el racional exacto que guarda un float, y Fraction(x).limit_denominator(n) encuentra la mejor aproximación racional con denominador acotado. Esto último es la base de la aproximación por fracciones continuas y explica por qué 22/7 y 355/113 son buenas aproximaciones de π.
Número armónico H₁₀ exacto frente a flotante.
H₁₀ = 1 + 1/2 + 1/3 + ... + 1/10
Exacto (Fraction): 7381/2520
Como float: 2.9289682539682538
Suma en float: 2.9289682539682538
Diferencia: 0.0 (en este caso coinciden)
Denominador: 2520 = mcm(1..10)
Fraction(0.1) == Fraction(1, 10) → False
porque el float 0.1 no es exactamente 1/10
Que coincidan con diez términos no significa que coincidan con un millón: el error crece con n (clase 034).
Fraction mantiene exactitud donde float ya perdió información.
python classes/part-01-aritmetica-computacional-y-representacion-numerica/038-racional-exacto-y-fraction/lab.py
compmath run 038
H_10_exactoH_10_floatH_10_exacto_como_floaterrordenominadorfloat_desde_fraction{
"H_10_exacto": "7381/2520",
"H_10_float": 2.9289682539682538,
"H_10_exacto_como_float": 2.9289682539682538,
"error": 0.0,
"denominador": 2520,
"float_desde_fraction": false
}
Verificación de implementaciones numéricas, cálculo simbólico ligero, probabilidades exactas en combinatoria y generación de casos de prueba con valor esperado conocido.
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.
fractions — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).9780199219865 verificado en International ISBN Agency (2026-08-19).