Cancelación catastrófica - Catastrophic cancellation

En el análisis numérico , la cancelación catastrófica es el fenómeno de que restar buenas aproximaciones a dos números cercanos puede producir una muy mala aproximación a la diferencia de los números originales.

Por ejemplo, suponga que tiene dos postes de madera, uno largo y otro largo. Si los mide con una regla que es buena solo en centímetros, puede obtener aproximaciones y . Dependiendo de sus necesidades, estos pueden ser buenas aproximaciones, en error relativo , a las longitudes reales: las aproximaciones son un error de menos del 2% de las longitudes reales, .

Sin embargo, si resta las longitudes aproximadas , obtendrá , aunque la verdadera diferencia entre las longitudes es . La diferencia de las aproximaciones, , está en error por 100% de la magnitud de la diferencia de los valores verdaderos, .

La cancelación catastrófica puede ocurrir incluso si la diferencia se calcula exactamente, como en el ejemplo anterior; no es una propiedad de ningún tipo particular de aritmética como la aritmética de punto flotante ; más bien, es inherente a la resta, cuando las entradas son aproximaciones en sí mismas. De hecho, en la aritmética de punto flotante, cuando las entradas están lo suficientemente cerca, la diferencia de punto flotante se calcula exactamente mediante el lema de Sterbenz : no hay error de redondeo introducido por la operación de resta de punto flotante.

Análisis formal

Formalmente, la cancelación catastrófica ocurre porque la resta está mal condicionada en las entradas cercanas: incluso si las aproximaciones y tienen pequeños errores relativos y de valores verdaderos y , respectivamente, el error relativo de la diferencia aproximada de la diferencia verdadera es inversamente proporcional a la diferencia verdadera:

Por lo tanto, el error relativo de la diferencia exacta de las aproximaciones de la diferencia de los números verdaderos es

que puede ser arbitrariamente grande si las verdaderas entradas y están cerca.

En algoritmos numéricos

Restar números cercanos en aritmética de punto flotante no siempre causa una cancelación catastrófica, o incluso ningún error, según el lema de Sterbenz , si los números están lo suficientemente cerca, la diferencia de punto flotante es exacta. Pero la cancelación puede amplificar los errores en las entradas que surgieron del redondeo en otra aritmética de punto flotante.

Ejemplo: diferencia de cuadrados

Dados los números y , el intento ingenuo de calcular la función matemática mediante la aritmética de punto flotante está sujeto a una cancelación catastrófica cuando y están cerca en magnitud, porque la resta amplificará los errores de redondeo en el cuadrado. La factorización alternativa , evaluada por la aritmética de punto flotante , evita la cancelación catastrófica porque evita introducir errores de redondeo que conducen a la resta.

Por ejemplo, si y , entonces el verdadero valor de la diferencia es . En la aritmética IEEE 754 binary64 , la evaluación de la factorización alternativa da el resultado correcto exactamente (sin redondeo), pero la evaluación de la expresión ingenua da el número de punto flotante más cercano , del cual solo la mitad de los dígitos son correctos y la otra mitad (subrayado) son basura.

Ejemplo: arcoseno complejo

Al calcular la función arcoseno compleja , uno puede tener la tentación de usar la fórmula logarítmica directamente:

Sin embargo, suponga para . Entonces y ; llame a la diferencia entre ellos —una diferencia muy pequeña, casi cero. Si se evalúa en aritmética de punto flotante dando

con cualquier error , donde denota redondeo de punto flotante, luego se calcula la diferencia

de dos números cercanos, ambos muy cercanos , puede amplificar el error en una entrada por un factor de —un factor muy grande porque era casi cero. Por ejemplo, si , el valor verdadero de es aproximadamente , pero usando la fórmula logarítmica ingenua en la aritmética IEEE 754 binary64 puede dar , con solo cinco de los dieciséis dígitos correctos y el resto (subrayado) todo basura.

En el caso de para , el uso de la identidad evita la cancelación porque pero , por lo que la resta es efectivamente una suma con el mismo signo que no cancela.

Ejemplo: conversión de radix

Las constantes numéricas en los programas de software a menudo se escriben en decimal, como en el fragmento C double x = 1.000000000000001;para declarar e inicializar una variable IEEE 754 binary64 nombrada x. Sin embargo, no es un número de coma flotante binary64; el más cercano, que se inicializará en este fragmento, es . Aunque la conversión de base de coma flotante decimal a coma flotante binaria solo incurre en un pequeño error relativo, la cancelación catastrófica puede amplificarlo en uno mucho mayor: x

double x = 1.000000000000001;  // rounded to 1 + 5*2^{-52}
double y = 1.000000000000002;  // rounded to 1 + 9*2^{-52}
double z = y - x;              // difference is exactly 4*2^{-52}

La diferencia es . Los errores relativos de desde y de desde se encuentran a continuación , y la resta de punto flotante se calcula exactamente mediante el lema de Sterbenz. xyy - x

Pero a pesar de que las entradas son buenas aproximaciones, y aunque la resta se calcula exactamente, la diferencia de las aproximaciones tiene un error relativo superior a la diferencia de los valores originales escritos en decimal: la cancelación catastrófica amplificó un pequeño error en la conversión de la base. en un gran error en la salida.

Cancelación benigna

La cancelación a veces es útil y deseable en algoritmos numéricos. Por ejemplo, los algoritmos 2Sum y Fast2Sum se basan en dicha cancelación después de un error de redondeo para calcular exactamente cuál fue el error en una operación de suma de punto flotante como un número de punto flotante en sí mismo.

La función , si se evalúa ingenuamente en los puntos , perderá la mayoría de los dígitos de en el redondeo . Sin embargo, la función en sí está bien acondicionada en entradas cercanas . Reescribiéndolo como

aprovecha la cancelación para evitar que el error se evalúe directamente. Esto funciona porque la cancelación en el numerador y la cancelación en el denominador se contrarrestan; la función está suficientemente bien condicionada cerca de cero, lo que da una buena aproximación a , y por lo tanto da una buena aproximación a .

Referencias