Pérdida de precisión en el análisis numérico.
En análisis numérico , cancelación catastrófica [1] [2] es el fenómeno por el cual 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, si hay dos montantes, uno largo y otro largo, y se miden con una regla que solo sirve al centímetro, entonces las aproximaciones podrían resultar ser y . Estas pueden ser buenas aproximaciones, con un error relativo , a las longitudes reales: las aproximaciones tienen un error de menos del 2% de las longitudes reales, .
Sin embargo, si se restan las longitudes aproximadas , la diferencia será , aunque la verdadera diferencia entre las longitudes sea . La diferencia de las aproximaciones, , tiene un error de casi el 100% de la magnitud de la diferencia de los valores verdaderos, .
La cancelación catastrófica no se ve afectada por el tamaño de los insumos; se aplica tanto a los insumos grandes como a los pequeños. Depende únicamente de qué tan grande sea la diferencia y del error de las entradas. Exactamente el mismo error surgiría al restar de as aproximaciones a y , o al restar de as aproximaciones a y .
Puede ocurrir una cancelación catastrófica 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 los datos de entrada son en sí mismos aproximaciones. De hecho, en 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 se introduce ningún error de redondeo 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 entradas cercanas: incluso si las aproximaciones y tienen pequeños errores relativos y de los valores verdaderos y , respectivamente, el error relativo de la diferencia de las aproximaciones de la diferencia de los valores verdaderos es inversamente proporcional. a la diferencia de los valores verdaderos:
Por lo tanto, el error relativo de la diferencia exacta de las aproximaciones de la diferencia de los valores verdaderos es
que puede ser arbitrariamente grande si los valores verdaderos y son cercanos.
En algoritmos numéricos
Restar números cercanos en aritmética de punto flotante no siempre causa una cancelación catastrófica, o incluso cualquier 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 otras aritméticas de punto flotante.
Ejemplo: diferencia de cuadrados
Dados los números y , el ingenuo intento de calcular la función matemática
mediante la aritmética de punto flotante
está sujeto a una cancelación catastrófica cuando y son similares en magnitud, porque la resta puede exponer los errores de redondeo en la elevación al cuadrado. La factorización alternativa , evaluada mediante la aritmética de punto flotante , evita una cancelación catastrófica porque evita introducir errores de redondeo en la resta. [2]
Por ejemplo, si
y , entonces el verdadero valor de la diferencia
es . En la aritmética binaria 64 de IEEE 754 , 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 , del cual menos de la mitad de los dígitos son correctos y los otros dígitos (subrayados) reflejan los términos faltantes , se pierden debido al redondeo al calcular los valores cuadrados intermedios.
Ejemplo: arcoseno complejo
Al calcular la función arcoseno complejo , uno puede verse tentado a utilizar la fórmula logarítmica directamente:
Sin embargo, supongamos que 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 a , 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 usar la ingenua fórmula logarítmica en la aritmética binaria 64 del IEEE 754 puede dar , con solo cinco de dieciséis dígitos correctos y el resto (subrayado) todo incorrecto.
En el caso de for , usar 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 para declarar e inicializar una variable binaria64 IEEE 754 denominada . Sin embargo, no es un número de punto flotante binario64; el más cercano, que se inicializará en este fragmento, es . Aunque la conversión de base de punto flotante decimal a punto flotante binario solo incurre en un pequeño error relativo, una cancelación catastrófica puede amplificarlo a uno mucho mayor:double x = 1.000000000000001;
x
x
doble x = 1.000000000000001 ; // redondeado a 1 + 5*2^{-52} double y = 1.000000000000002 ; // redondeado a 1 + 9*2^{-52} double z = y - x ; // la diferencia es exactamente 4*2^{-52}
La diferencia es . Los errores relativos de from y from están a continuación y la resta de punto flotante se calcula exactamente mediante el lema de Sterbenz.x
y
y - x
Pero aunque las entradas son buenas aproximaciones, y aunque la resta se calcula exactamente, la diferencia de las aproximaciones tiene un error relativo de más de la diferencia de los valores originales escritos en decimal: la cancelación catastrófica amplificó un pequeño error en la conversión de base. en un gran error en la salida.
Cancelación benigna
La cancelación es a veces ú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í.
La función , si se evalúa ingenuamente en los puntos , perderá la mayoría de los dígitos en el redondeo . Sin embargo, la función
en sí está bien condicionada en entradas cercanas a . Reescribiéndolo como
[2]Referencias
- ^ Müller, Jean-Michel; Brunie, Nicolás; de Dinechin, Florent; Jeannerod, Claude-Pierre; Joldes, Mioara; Lefèvre, Vicente; Melquiond, Guillaume; Revol, Nathalie ; Torres, Serge (2018). Manual de aritmética de coma flotante (2ª ed.). Gewerbestrasse 11, 6330 Cham, Suiza: Birkhäuser. pag. 102.doi :10.1007/978-3-319-76526-6 . ISBN 978-3-319-76525-9.
{{cite book}}
: CS1 maint: location (link) - ^ abc Goldberg, David (marzo de 1991). "Lo que todo informático debería saber sobre la aritmética de punto flotante". Encuestas de Computación ACM . 23 (1). Nueva York, NY, Estados Unidos: Association for Computing Machinery: 5–48. doi :10.1145/103162.103163. ISSN 0360-0300. S2CID 222008826 . Consultado el 17 de septiembre de 2020 .