La máquina epsilon da un límite superior al error relativo debido al redondeo en la aritmética de coma flotante . Este valor caracteriza a la aritmética informática en el campo del análisis numérico y, por extensión, en la asignatura de ciencia computacional . La cantidad también se llama macheps o redondeo de unidades , y tiene los símbolos griegos épsilon o U romana en negrita , respectivamente.
Valores para aritmética de punto flotante de hardware estándar
Los siguientes valores de épsilon de la máquina se aplican a los formatos de coma flotante estándar:
IEEE 754 - 2008 | Nombre común | Tipo de datos C ++ | Base | Precisión | Epsilon de la máquina [a] | Epsilon de la máquina [b] |
---|---|---|---|---|---|---|
binario16 | media precisión | N / A | 2 | 11 (un bit está implícito) | 2 −11 ≈ 4.88e-04 | 2 −10 ≈ 9,77e-04 |
binary32 | precisión simple | flotador | 2 | 24 (un bit está implícito) | 2 −24 ≈ 5,96e-08 | 2 −23 ≈ 1,19e-07 |
binary64 | Precisión doble | doble | 2 | 53 (un bit está implícito) | 2 −53 ≈ 1,11e-16 | 2 −52 ≈ 2,22e-16 |
precisión extendida , doble largo | _float80 [1] | 2 | 64 | 2 −64 ≈ 5.42e-20 | 2 −63 ≈ 1.08e-19 | |
binary128 | precisión cuádruple (ruptura) | _float128 [1] | 2 | 113 (un bit está implícito) | 2 −113 ≈ 9,63e-35 | 2 −112 ≈ 1,93e-34 |
decimal32 | decimal de precisión simple | _Decimal32 [2] | 10 | 7 | 5 × 10 −7 | 10 −6 |
decimal64 | decimal de doble precisión | _Decimal64 [2] | 10 | dieciséis | 5 × 10 −16 | 10 -15 |
decimal128 | decimal de precisión cuádruple (ruptura) | _Decimal128 [2] | 10 | 34 | 5 × 10 −34 | 10 −33 |
Definicion formal
El redondeo es un procedimiento para elegir la representación de un número real en un sistema numérico de coma flotante . Para un sistema numérico y un procedimiento de redondeo, épsilon de máquina es el error relativo máximo del procedimiento de redondeo elegido.
Se necesitan algunos antecedentes para determinar un valor a partir de esta definición. Un sistema numérico de coma flotante se caracteriza por una base que también se llama base,, y por la precisión , es decir, el número de radix dígitos del significando (incluido cualquier bit implícito inicial). Todos los números con el mismo exponente ,, tenga el espaciado, . El espaciado cambia en los números que son potencias perfectas de; el espaciado en el lado de mayor magnitud es veces mayor que el espaciado en el lado de menor magnitud.
Dado que la máquina épsilon es un límite para el error relativo, basta con considerar números con exponente . También basta con considerar números positivos. Para el tipo de redondeo habitual de redondeo al más cercano, el error de redondeo absoluto es como máximo la mitad del espaciado, o. Este valor es el numerador más grande posible para el error relativo. El denominador del error relativo es el número que se redondea, que debe ser lo más pequeño posible para que el error relativo sea grande. Por lo tanto, el peor error relativo ocurre cuando se aplica el redondeo a números de la forma dónde está entre y . Todos estos números se redondean a con error relativo . El máximo ocurre cuandoestá en el extremo superior de su rango. La en el denominador es insignificante en comparación con el numerador, por lo que se deja por conveniencia, y solo se toma como máquina épsilon. Como se ha mostrado aquí, el error relativo es peor para los números que se redondean a, por lo que la máquina épsilon también se denomina redondeo de unidades, lo que significa aproximadamente "el error máximo que puede ocurrir al redondear al valor unitario".
Por lo tanto, el espaciado máximo entre un número de coma flotante normalizado, , y un número normalizado adyacente es X . [3]
Modelo aritmético
El análisis numérico utiliza épsilon de máquina para estudiar los efectos del error de redondeo. Los errores reales de la aritmética de la máquina son demasiado complicados para estudiarlos directamente, por lo que se utiliza el siguiente modelo simple. El estándar aritmético IEEE dice que todas las operaciones de coma flotante se realizan como si fuera posible realizar la operación de precisión infinita, y luego, el resultado se redondea a un número de coma flotante. Supongamos (1), son números de coma flotante, (2) es una operación aritmética en números de coma flotante como la suma o la multiplicación, y (3) es la operación de precisión infinita. Según el estándar, la computadora calcula:
Por el significado de épsilon de máquina, el error relativo del redondeo es como máximo épsilon de máquina en magnitud, por lo que:
dónde en magnitud absoluta es como máximo o u . Se pueden consultar los libros de Demmel y Higham en las referencias para ver cómo se usa este modelo para analizar los errores de, digamos, la eliminación gaussiana.
Definiciones de variantes
El estándar IEEE no define los términos épsilon de máquina y redondeo de unidades , por lo que se utilizan diferentes definiciones de estos términos, lo que puede causar cierta confusión.
La definición dada aquí para la máquina épsilon es la utilizada por el Prof. James Demmel en los guiones de conferencias, [4] el paquete de álgebra lineal LAPACK , [5] artículos de investigación numérica [6] y algunos programas de computación científica. [7] La mayoría de los analistas numéricos utilizan las palabras máquina épsilon y redondeo de unidades indistintamente con este significado.
La siguiente definición diferente está mucho más extendida fuera de la academia: la máquina épsilon se define como la diferencia entre 1 y el siguiente número de coma flotante más grande. Por esta definición,es igual al valor de la unidad en el último lugar relativo a 1, es decir, [8] y el redondeo unitario es u, asumiendo el modo de redondeo al más cercano. La prevalencia de esta definición se basa en su uso en la Norma ISO C para las constantes relacionadas con los tipos de punto flotante [9] [10] y las constantes correspondientes en otros lenguajes de programación. [11] [12] También se usa ampliamente en software de computación científica, [13] [14] [15] y en la literatura numérica e informática. [16] [17] [18] [19]
Cómo determinar la máquina épsilon
Cuando las bibliotecas estándar no proporcionan valores precalculados (como lo hace < float.h > con FLT_EPSILON
, DBL_EPSILON
y LDBL_EPSILON
para C y < limits > lo hace con en C ++), la mejor manera de determinar el épsilon de la máquina es consultar la tabla anterior y usar el fórmula de potencia adecuada. La épsilon de la máquina de cómputo se da a menudo como un ejercicio de libro de texto. Los siguientes ejemplos calculan la épsilon de la máquina en el sentido del espaciado de los números de coma flotante en 1 en lugar de en el sentido del redondeo unitario.std::numeric_limits<T>::epsilon()
Tenga en cuenta que los resultados dependen del formato de punto flotante particular utilizado, como float , double , long double o similar, según sea compatible con el lenguaje de programación, el compilador y la biblioteca de tiempo de ejecución para la plataforma real.
Es posible que algunos formatos admitidos por el procesador no sean compatibles con el compilador y el sistema operativo elegidos. La biblioteca en tiempo de ejecución puede emular otros formatos, incluida la aritmética de precisión arbitraria disponible en algunos lenguajes y bibliotecas.
En un sentido estricto, el término máquina épsilon significa la precisión 1 + eps soportada directamente por el procesador (o coprocesador), no una precisión 1 + eps soportada por un compilador específico para un sistema operativo específico, a menos que se sepa que utiliza el mejor formato.
Los formatos de punto flotante IEEE 754 tienen la propiedad de que, cuando se reinterpretan como un entero en complemento a dos del mismo ancho, aumentan monótonamente sobre valores positivos y disminuyen monótonamente sobre valores negativos (consulte la representación binaria de flotantes de 32 bits ). También tienen la propiedad de que 0 <| f ( x ) | <∞, y | f ( x +1) - f ( x ) | ≥ | f ( x ) - f ( x −1) | (donde f ( x ) es la reinterpretación entera de x antes mencionada ). En lenguajes que permiten juegos de palabras con tipos y siempre usan IEEE 754-1985, podemos aprovechar esto para calcular una epsilon de máquina en tiempo constante. Por ejemplo, en C:
unión typedef { long long i64 ; doble d64 ; } dbl_64 ; double machine_eps ( valor doble ) { dbl_64 s ; s . d64 = valor ; s . i64 ++ ; volver s . d64 - valor ; }
Esto dará un resultado del mismo signo que valor. Si siempre se desea un resultado positivo, la declaración de retorno de machine_eps se puede reemplazar con:
return ( s . i64 < 0 ? valor - s . d64 : s . d64 - valor );
Los dobles de 64 bits dan 2,220446e-16, que es 2 −52 como se esperaba.
Aproximación
El siguiente algoritmo simple se puede utilizar para aproximar [ aclaración necesaria ] el épsilon de la máquina, dentro de un factor de dos (un orden de magnitud ) de su valor verdadero, utilizando una búsqueda lineal .
épsilon = 1,0;mientras que (1.0 + 0.5 * épsilon) ≠ 1.0: épsilon = 0.5 * épsilon
Ver también
- Punto flotante , discusión general sobre problemas de precisión en aritmética de punto flotante
- Unidad en último lugar (ULP)
notas y referencias
- ^ a b Tipos flotantes: uso de la colección de compiladores GNU (GCC)
- ^ a b c Flotante decimal: uso de la colección de compiladores GNU (GCC)
- ^ Higham, Nicholas (2002). Precisión y estabilidad de algoritmos numéricos (2 ed) . SIAM. pag. 37.
- ^ "Problemas básicos en aritmética de coma flotante y análisis de errores" . 21 de octubre de 1999 . Consultado el 11 de abril de 2013 .
- ^ "Guía del usuario de LAPACK tercera edición" . 22 de agosto de 1999 . Consultado el 9 de marzo de 2012 .
- ^ "David Goldberg: lo que todo científico informático debe saber sobre la aritmética de punto flotante, encuestas de computación ACM, vol. 23, n. ° 1, marzo de 1991" (PDF) . Consultado el 11 de abril de 2013 .
- ^ "Documentación de Scilab - number_properties - determinar parámetros de punto flotante" . Consultado el 11 de abril de 2013 .
- ^ tenga en cuenta que aquí p se define como la precisión, es decir, el número total de bits en el significado, incluido el bit inicial implícito, como se usa en la tabla anterior
- ^ Jones, Derek M. (2009). El nuevo estándar C: un comentario económico y cultural (PDF) . pag. 377.
- ^ "Referencia de float.h en cplusplus.com" . Consultado el 11 de abril de 2013 .
- ^ "Referencia de std :: numeric_limits en cplusplus.com" . Consultado el 11 de abril de 2013 .
- ^ "Documentación de Python - Parámetros y funciones específicos del sistema" . Consultado el 11 de abril de 2013 .
- ^ "Documentación de Mathematica: $ MachineEpsilon" . Consultado el 11 de abril de 2013 .
- ^ "Documentación de Matlab - eps - Precisión relativa de punto flotante" . Archivado desde el original el 7 de agosto de 2013 . Consultado el 11 de abril de 2013 .
- ^ "Documentación de octava - función eps" . Consultado el 11 de abril de 2013 .
- ^ Higham, Nicholas (2002). Precisión y estabilidad de algoritmos numéricos (2 ed) . SIAM. págs. 27-28.
- ^ Quarteroni, Alfio; Sacco, Riccardo; Saleri, Fausto (2000). Matemáticas numéricas (PDF) . Saltador. pag. 49. ISBN 0-387-98959-5. Archivado desde el original (PDF) el 14 de noviembre de 2017 . Consultado el 11 de abril de 2013 .
- ^ Prensa, William H .; Teukolsky, Saul A .; Vetterling, William T .; Flannery, Brian P. Recetas numéricas . pag. 890.
- ^ Engeln-Müllges, Gisela; Reutter, Fritz (1996). Numerik-Algorithmen . pag. 6. ISBN 3-18-401539-4.
- Anderson, E .; LAPACK Users 'Guide, Society for Industrial and Applied Mathematics (SIAM), Filadelfia, PA, tercera edición, 1999.
- Cody, William J .; MACHAR: una rutina para determinar dinámicamente los parámetros de la máquina, transacciones ACM en software matemático, vol. 14 (4), 1988, 303-311.
- Besset, Didier H .; Implementación orientada a objetos de métodos numéricos, Morgan & Kaufmann, San Francisco, CA, 2000.
- Demmel, James W. , Álgebra lineal numérica aplicada, Sociedad de Matemáticas Industriales y Aplicadas (SIAM), Filadelfia, PA, 1997.
- Higham, Nicholas J .; Precisión y estabilidad de algoritmos numéricos, Sociedad de Matemáticas Industriales y Aplicadas (SIAM), Filadelfia, PA, segunda edición, 2002.
- Prensa, William H .; Teukolsky, Saul A .; Vetterling, William T .; y Flannery, Brian P .; Recetas numéricas en Fortran 77 , 2ª ed., Cap. 20.2, págs. 881–886
- Forsythe, George E .; Malcolm, Michael A .; Moler, Cleve B .; "Métodos informáticos para cálculos matemáticos", Prentice-Hall, ISBN 0-13-165332-6 , 1977
enlaces externos
- MACHAR , una rutina (en C y Fortran) para "calcular dinámicamente constantes de máquina" (algoritmo ACM 722)
- Diagnóstico de precisión de cálculos de coma flotante , Implementación de MACHAR en Component Pascal y Oberon basado en la versión Fortran 77 de MACHAR publicada en Numerical Recipes (Press et al., 1992).