Inicio · Parte 01 — Aritmética computacional y representación numérica
float64: max ≈ 1.797e308, min normal ≈ 2.225e−308, min subnormal = 5e−324
inf − inf = NaN, 0/0 = NaN, NaN != NaN
El rango de float64 tiene tres zonas. Los normales van de 2.2·10⁻³⁰⁸ a 1.8·10³⁰⁸ con la precisión completa de 53 bits. Por debajo del mínimo normal están los subnormales, que renuncian al bit implícito para poder acercarse más al cero: llegan hasta 5·10⁻³²⁴ pero con precisión progresivamente menor. Por encima del máximo está el infinito.
Los subnormales existen para que la resta de dos números cercanos nunca dé cero cuando los números son distintos, propiedad conocida como gradual underflow. Sin ellos, a − b == 0 podría ser cierto con a != b, lo que rompe algoritmos que dividen por esa diferencia. La contrapartida es de rendimiento: en muchas CPU las operaciones con subnormales son órdenes de magnitud más lentas, y por eso los frameworks de deep learning ofrecen el modo flush-to-zero.
El desbordamiento no lanza excepción: produce inf, y el cálculo continúa. Esto es deliberado —permite terminar una operación vectorizada y detectar el problema al final— pero exige comprobar los resultados. El NaN aparece en las operaciones indeterminadas (inf − inf, 0/0, √(−1)) y tiene una propiedad que sorprende: no es igual a sí mismo. nan == nan es False, y por eso hay que usar math.isnan.
En entrenamiento de redes, la secuencia típica es: un gradiente crece, produce inf, el inf participa en una resta y produce NaN, y el NaN contamina todos los pesos en una sola actualización. Detectarlo exige comprobar explícitamente; el programa no avisa.
Los tres límites y la propiedad del NaN.
max float64 1.7976931348623157e+308
max × 2 inf ← sin excepción
min normal 2.2250738585072014e−308
min subnormal 5e−324
min subnormal / 2 0.0 ← underflow a cero
inf − inf nan
nan == nan False ← usar math.isnan
Un inf en un cálculo no detiene nada. Se propaga en silencio hasta que alguien comprueba.
Límites del float64 y el paso por subnormales.
python classes/part-01-aritmetica-computacional-y-representacion-numerica/033-overflow-y-underflow-flotante/lab.py
compmath run 033
max_floatmax*2_da_infmin_normalmin_subnormalmin_subnormal/2underflow_a_ceroinf-inf_es_nan{
"max_float": 1.7976931348623157e+308,
"max*2_da_inf": Infinity,
"min_normal": 2.2250738585072014e-308,
"min_subnormal": 5e-324,
"min_subnormal/2": 0.0,
"underflow_a_cero": true
}
Depuración de entrenamientos que producen NaN, control de estabilidad en softmax y logaritmos, y validación de pipelines numéricos. La estabilización de softmax (clase 321) existe para evitar exactamente este overflow.
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.
sys.float_info — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).