La mitigación de errores de punto flotante es la minimización de los errores causados por el hecho de que los números reales, en general, no pueden representarse con precisión en un espacio fijo. Por definición, el error de punto flotante no se puede eliminar y, en el mejor de los casos, sólo se puede gestionar.
Huberto M. Sierra señaló en su patente de 1956 "Medios de control aritmético de coma decimal flotante para calculadora": [1]
Por lo tanto, en algunas condiciones, la mayor parte de los dígitos de datos significativos pueden estar más allá de la capacidad de los registros. Por tanto, el resultado obtenido puede tener poco significado si no totalmente erróneo.
El Z1 , desarrollado por Konrad Zuse en 1936, fue el primer ordenador con aritmética de punto flotante y, por tanto, era susceptible a errores de punto flotante. Sin embargo, las primeras computadoras, con tiempos de operación medidos en milisegundos, eran incapaces de resolver problemas grandes y complejos [2] y, por lo tanto, rara vez estaban plagados de errores de punto flotante. Sin embargo, hoy en día, con el rendimiento del sistema de supercomputadora medido en petaflops , el error de punto flotante es 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 enfoque principal del análisis numérico , [3] [4] : 5 el análisis de errores numéricos 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 la inicialmente considerada. El estándar IEEE 754 define la precisión como el número 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 exactitud 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 un suma de punto flotante redondeada al más cercano. También se puede obtener el término de error (exacto) de una multiplicación de punto flotante redondeada 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 redondeada 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 la base , en particular de binaria 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 utilizada para poner límites a los errores de redondeo y de medición en el cálculo matemático . Los valores son intervalos, que se pueden representar de varias formas, como por ejemplo: [6]
"En lugar de utilizar un único número de punto flotante como aproximación al valor de una variable real en el modelo matemático bajo investigación, la aritmética de intervalos reconoce una precisión limitada al asociar con la variable un conjunto de valores reales como posibles valores. Para facilitar el almacenamiento y el cálculo , estos conjuntos están restringidos a intervalos." [7]
La evaluación de la expresión aritmética de intervalos puede proporcionar una amplia gama de valores [7] y puede sobrestimar seriamente los verdaderos límites del error. [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 del significado , y la información de error se transporta en un solo bit, el ubit, que representa un posible error en el bit menos significativo del significado ( ULP ). [9] : 4
William Kahan cuestiona la eficacia de los unums . [8]
La coma flotante acotada es un método propuesto y patentado por Alan Jorgensen. [10] La estructura de datos incluye la estructura e interpretación de datos estándar IEEE 754 , 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]