Fenómeno en análisis numérico
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.
x
y
y - 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