La mitigación de errores de punto flotante consiste en minimizar los errores causados por el hecho de que, en general, los números reales no pueden representarse con precisión en un espacio fijo. Por definición, los errores de punto flotante no pueden eliminarse y, en el mejor de los casos, solo pueden gestionarse.
Huberto M. Sierra señaló en su patente de 1956 "Medios de control aritmético de punto decimal flotante para calculadora": [1]
Por lo tanto, en determinadas circunstancias, la mayor parte de los dígitos de datos significativos pueden estar fuera de la capacidad de los registros, por lo que el resultado obtenido puede tener poco significado o incluso ser totalmente erróneo.
El Z1 , desarrollado por Konrad Zuse en 1936, fue el primer ordenador con aritmética de punto flotante y, por tanto, susceptible a errores de punto flotante. Sin embargo, los primeros ordenadores, con tiempos de operación medidos en milisegundos, eran incapaces de resolver problemas grandes y complejos [2] y, por tanto, rara vez se veían afectados por errores de punto flotante. Sin embargo, hoy en día, con el rendimiento de los sistemas de supercomputadoras medido en petaflops , los errores de punto flotante son una preocupación importante para los solucionadores de problemas computacionales.
Las siguientes secciones describen las fortalezas y debilidades de varios medios para mitigar el error de punto flotante.
Aunque no es el foco principal del análisis numérico , [3] [4] : 5 el análisis de error numérico existe para el análisis y minimización del error de redondeo de punto flotante.
El análisis de errores mediante la aritmética de Monte Carlo se logra inyectando repetidamente pequeños errores en los valores de datos de un algoritmo y determinando el efecto relativo sobre los resultados.
La extensión de la precisión es el uso de representaciones de valores reales más grandes que las consideradas inicialmente. El estándar IEEE 754 define la precisión como la cantidad de dígitos disponibles para representar números reales. Un lenguaje de programación puede incluir precisión simple (32 bits), precisión doble (64 bits) y precisión cuádruple (128 bits). Si bien la extensión de la precisión hace que los efectos del error sean menos probables o menos importantes, aún se desconoce la verdadera precisión de los resultados.
La aritmética de longitud variable representa los números como una cadena de dígitos de longitud variable limitada únicamente por la memoria disponible. Las operaciones aritméticas de longitud variable son considerablemente más lentas que las instrucciones de punto flotante con formato de longitud fija. Cuando no se requiere un alto rendimiento, pero sí una alta precisión, la aritmética de longitud variable puede resultar útil, aunque es posible que no se conozca la precisión real del resultado.
El algoritmo de punto flotante conocido como TwoSum [5] o 2Sum , debido a Knuth y Møller, y su versión más simple, pero restringida FastTwoSum o Fast2Sum (3 operaciones en lugar de 6), permiten obtener el término de error (exacto) de una suma de punto flotante redondeado al más cercano. También se puede obtener el término de error (exacto) de una multiplicación de punto flotante redondeado al más cercano en 2 operaciones con una multiplicación-suma fusionada (FMA), o 17 operaciones si la FMA no está disponible (con un algoritmo debido a Dekker). Estos términos de error se pueden utilizar en algoritmos para mejorar la precisión del resultado final, por ejemplo, con expansiones de punto flotante o algoritmos compensados.
Las operaciones que dan el resultado de una suma o multiplicación de punto flotante redondeado al término de error más cercano (pero que difieren ligeramente de los algoritmos mencionados anteriormente) se han estandarizado y recomendado en el estándar IEEE 754-2019.
Cambiar el radio , en particular de binario a decimal, puede ayudar a reducir el error y controlar mejor el redondeo en algunas aplicaciones, como las financieras .
La aritmética de intervalos es una técnica matemática que se utiliza para poner límites a los errores de redondeo y de medición en los cálculos matemáticos . Los valores son intervalos, que pueden representarse de varias maneras, como: [6]
"En lugar de utilizar un único número de punto flotante como aproximación del valor de una variable real en el modelo matemático en estudio, la aritmética de intervalos reconoce una precisión limitada al asociar con la variable un conjunto de números reales como valores posibles. Para facilitar el almacenamiento y el cálculo, estos conjuntos se limitan a intervalos". [7]
La evaluación de expresiones aritméticas de intervalos puede proporcionar un amplio rango de valores, [7] y puede sobrestimar seriamente los límites de error reales. [8] : 8
Los unums ("Números Universales") son una extensión de la aritmética de longitud variable propuesta por John Gustafson . [9] Los unums tienen campos de longitud variable para las longitudes del exponente y la mantisa y la información de error se transporta en un solo bit, el ubit, que representa un posible error en el bit menos significativo de la mantisa ( ULP ). [9] : 4
La eficacia de los unums es cuestionada por William Kahan . [8]
El punto flotante acotado es un método propuesto y patentado por Alan Jorgensen. [10] La estructura de datos incluye la estructura de datos estándar IEEE 754 y su interpretación, así como información sobre el error entre el valor real verdadero representado y el valor almacenado por la representación de punto flotante. [11]
El punto flotante acotado ha sido criticado por ser un derivado del trabajo de Gustafson sobre unums y aritmética de intervalos. [10] [12]