seegongsik
Mis palabras
Matemáticas para ingeniería

Una computadora solo conoce los números de forma aproximada

Los límites del punto flotante; épsilon de máquina, acumulación de redondeo, cancelación catastrófica y condicionamiento

Hasta ahora tratamos el error como algo que viene del método: el paso es muy grande, el grado muy bajo. Pero bajo todo método yace un límite más fundamental. Una computadora no puede almacenar los números reales exactamente, ni siquiera 0.1. Un flotante de 64 bits recuerda solo unos 15 a 16 dígitos y redondea el resto. Normalmente este error minúsculo queda enterrado e invisible, pero salta en cuanto restas dos números casi iguales, acumulas un error pequeño un millón de veces, o te topas con un problema cuya respuesta es sensible a su entrada (un mal número de condición). Esta lección mira el suelo del análisis numérico, la manera misma en que una computadora maneja los números y el error que se filtra de ahí. Es la identidad del suelo de redondeo que viste en la lección anterior.

Las marcas en la recta numérica son los números que una computadora puede almacenar exactamente. A primera vista parece raro: densas cerca de 0, más ralas a la derecha. Es porque el punto flotante escribe un número como unos pocos dígitos significativos más un exponente, muy parecido a la notación científica. Así que cada vez que la magnitud se duplica (una octava), el hueco entre valores representables vecinos también se duplica. Ese hueco mínimo se llama ulp (units in the last place). Mueve x y ves crecer el ulp para números mayores. Significa que los números grandes se guardan en grueso y los pequeños en fino. Todo error de redondeo empieza aquí.

Midamos qué tan pequeño es ese hueco, cerca de 1. Suma ε = 2k a 1 y baja k paso a paso. En algún momento 1+ε simplemente se vuelve 1. Ocurre cuando el ε añadido es menor que la mitad del hueco representable por encima de 1, así que se redondea al valor representable más cercano, que es 1 mismo. Este límite es el épsilon de máquina: en float64 es 2⁻⁵² ≈ 2.2×10⁻¹⁶, unos 15 a 16 dígitos significativos. No es charla abstracta sino aritmética real. Para una computadora, 1 más un número diminuto puede ser simplemente 1. Es la primera prueba de que la precisión tiene un suelo.

Un solo error ronda los 10⁻¹⁶, así que parece seguro ignorarlo. Pero 0.1 no divide exacto en binario, así que en el momento en que se almacena ya carga un error diminuto. Cada vez que lo sumas, ese error también se apila un poco. Usa el control para subir el número de sumas y mira crecer de forma constante el error respecto al verdadero n/10. Lo invisible en un paso se vuelve claro tras unos cientos, y en un cálculo que se repite miles de millones de veces, como una simulación, puede arruinar el resultado. Por eso los programadores numéricos doman esta acumulación cambiando el orden de la suma (los más pequeños primero) o usando suma compensada (suma de Kahan).

El caso más temible es propio: restar dos números casi iguales. Calcula (1−cos x)/x² para x pequeño. El valor verdadero debería ir a 0.5 cuando x mengua. Sin embargo la curva dorada (calculada de forma ingenua) colapsa a 0 en cierto punto. Cuando x es pequeño, cos x es casi 1, así que 1−cos x pierde casi todos sus dígitos significativos: los dígitos iniciales coinciden y se cancelan, dejando solo dígitos finales poco fiables. Esto es la cancelación catastrófica. La curva azul calcula el mismo valor reescrito como 1−cos x = 2 sin²(x/2). Como nunca resta, mantiene 0.5 hasta el fondo. La fórmula es la misma, pero el orden del cálculo salva o hunde la precisión.

El último no trata del error sino de la naturaleza del problema mismo. Resolver un sistema de ecuaciones es hallar dónde se cruzan dos rectas. Si las rectas se cortan limpiamente, la intersección es nítida. ¿Pero qué pasa si son casi paralelas? Empuja una recta un pelo y la intersección se dispara lejos. Usa el control para bajar la pendiente y volver las rectas casi paralelas: para el mismo empujón del 10% la solución se mueve cada vez más. Este factor de amplificación es el número de condición. Un número de condición grande (mal condicionado) infla un error de entrada pequeño hasta grande en la respuesta. Lo aterrador es que, a diferencia del redondeo, esto no lo arregla una computadora mejor, porque el problema mismo es delicado. Por eso el buen análisis numérico cuida tanto un algoritmo estable como un problema bien condicionado.

En la prácticaUna computadora almacena los números reales con solo unos 15 a 16 dígitos significativos. Los números representables son densos cerca de 0 y más ralos cuando son grandes, así que el hueco (ulp) se duplica cada octava. El número más pequeño distinguible de 1 es el épsilon de máquina (float64 ≈ 2.2×10⁻¹⁶). Este redondeo diminuto suele quedar enterrado pero salta en tres situaciones: la acumulación de errores pequeños (simulaciones), la cancelación catastrófica al restar números casi iguales, y un mal número de condición donde la respuesta es sensible a la entrada. Los dos primeros se reducen reescribiendo el algoritmo para que sea estable (orden de operaciones, fórmulas equivalentes); el número de condición es una propiedad del problema mismo y no lo arregla una computadora mejor. Los dos pilares del análisis numérico nacen de aquí: elegir un método estable y reformular el problema para que esté bien condicionado. Este es el suelo bajo todo cálculo numérico.
Matemáticas para ingeniería
¿Te fue útil? Apoyar seegongsik