stringtranslate.com

maquina épsilon

El épsilon de la máquina o la precisión de la máquina es un límite superior del error de aproximación relativo debido al redondeo en la aritmética de punto flotante . Este valor caracteriza a la aritmética informática en el campo del análisis numérico , y por extensión en el tema de la ciencia computacional . La cantidad también se llama macheps y tiene los símbolos griegos épsilon .

Hay dos definiciones predominantes. En análisis numérico, la máquina épsilon depende del tipo de redondeo utilizado y también se denomina redondeo unitario , que tiene el símbolo en negrita u romana . Sin embargo, según una definición menos formal, pero más utilizada, la máquina épsilon es independiente del método de redondeo y puede ser equivalente a u o 2 u .

Valores para aritmética de hardware estándar

La siguiente tabla enumera los valores épsilon de la máquina para formatos estándar de punto flotante. Cada formato utiliza redondeo al más cercano .

  1. ^ Según la definición formal, utilizada por el Prof. Demmel, LAPACK y Scilab
  2. ^ Según una definición variante muy extendida, utilizada por el profesor Higham; Norma ISO C; Constantes de lenguaje Ada , C , C++ , Python y Rust ; Mathematica , MATLAB y Octava ; y varios libros de texto

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, el épsilon 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 punto flotante se caracteriza por una base que también se llama base, y por la precisión , es decir, el número de dígitos de la base del significado (incluido cualquier bit implícito inicial). Todos los números con el mismo exponente , , tienen 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 donde está entre y . Todos estos números se redondean con error relativo . El máximo se produce cuando se encuentra en el extremo superior de su rango. El valor en el denominador es insignificante en comparación con el numerador, por lo que se omite por conveniencia y simplemente 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 unitario, 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 . [3]

modelo aritmético

El análisis numérico utiliza una máquina épsilon para estudiar los efectos del error de redondeo. Los errores reales de la aritmética mecánica 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 punto 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 punto flotante. Supongamos que (1) son números de punto flotante, (2) es una operación aritmética en números de punto flotante como la suma o la multiplicación, y (3) es la operación de precisión infinita. Según la norma, la computadora calcula:

Según el significado de épsilon de máquina, el error relativo del redondeo tiene como máximo una magnitud de épsilon de máquina, por lo que:

donde 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 utiliza 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 unidad , por lo que se utilizan definiciones diferentes de estos términos, lo que puede causar cierta confusión.

La definición formal de máquina épsilon es la utilizada por el Prof. James Demmel en guiones de conferencias, [4] el paquete de álgebra lineal LAPACK , [5] artículos de investigación numérica [6] y algunos programas informáticos científicos. [7] La ​​mayoría de los analistas numéricos utilizan las palabras máquina épsilon y redondeo unitario indistintamente con este significado.

Esta definición alternativa está mucho más extendida fuera del mundo académico: la máquina épsilon es la diferencia entre 1 y el siguiente número de punto flotante más grande .

Según esta definición, es igual al valor de la unidad en el último lugar con respecto a 1, es decir (donde está la base del sistema de punto flotante y es la precisión) y la unidad redondeada es u , asumiendo el modo de redondeo al más cercano , y u , asumiendo redondo por corte .

La prevalencia de esta definición tiene sus raíces en su uso en el estándar ISO C para constantes relacionadas con tipos de punto flotante [8] [9] y constantes correspondientes en otros lenguajes de programación. [10] [11] [12] También se utiliza ampliamente en software informático científico, [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_EPSILONy LDBL_EPSILONpara C y < limits > lo hace con en C++), la mejor manera de determinar la máquina épsilon es consultar la tabla anterior y utilizar el fórmula de potencia adecuada. La máquina de computación épsilon se presenta a menudo como ejercicio de libro de texto. Los siguientes ejemplos calculan el é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 doubleo similar, según lo admita 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 idiomas y bibliotecas.

En sentido estricto, el término máquina épsilon significa la precisión admitida directamente por el procesador (o coprocesador), no cierta precisión respaldada 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 los valores positivos y disminuyen monótonamente sobre los valores negativos (consulte la representación binaria de flotantes de 32 bits ). También tienen la propiedad de que , y (donde está la reinterpretación de enteros antes mencionada de ). En lenguajes que permiten juegos de palabras y siempre usan IEEE 754–1985, podemos aprovechar esto para calcular una máquina épsilon en tiempo constante. Por ejemplo, en C:

unión typedef { largo largo i64 ; doble d64 ; } dbl_64 ;        double machine_eps ( valor doble ) { dbl_64 s ; s . d64 = valor ; s . i64 ++ ; devoluciones . _ d64 - valor ; }             

Esto dará un resultado del mismo signo que el 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 );           

Ejemplo en Python:

def  machineEpsilon ( func = float ):  machine_epsilon  =  func ( 1 )  while  func ( 1 ) + machine_epsilon  ! =  func ( 1 ):  machine_epsilon_last  =  machine_epsilon  machine_epsilon  =  func ( machine_epsilon )  /  func ( 2 )  return  machine_epsilon_last


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 [ se necesita aclaración ] la máquina épsilon, 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

La máquina épsilon también se puede calcular simplemente como dos elevado a la potencia negativa del número de bits utilizados para la mantisa.

Relación con el error relativo absoluto

Si es la representación mecánica de un número , entonces el error relativo absoluto en la representación es [20]

Prueba

La siguiente prueba se limita a números positivos y representaciones de máquinas que utilizan ronda por corte .

Si queremos representar un número positivo, estará entre un número de máquina debajo y un número de máquina arriba .

Si , ¿dónde está el número de bits utilizados para la magnitud del significado ?, entonces:

Dado que la representación de será cualquiera o ,

Aunque esta prueba se limita a números positivos y redondeo por corte, se puede utilizar el mismo método para probar la desigualdad en relación con números negativos y representaciones de máquina de redondeo a más cercano .

Ver también

notas y referencias

  1. ^ ab Tipos flotantes: uso de la colección de compiladores GNU (GCC)
  2. ^ abc Decimal Float: uso de la colección de compiladores GNU (GCC)
  3. ^ "Cuestiones básicas en aritmética de coma flotante y análisis de errores". Universidad de California, Berkeley. 21 de octubre de 1999 . Consultado el 11 de junio de 2022 . La distancia entre 1 y el siguiente número de punto flotante más grande es 2*macheps.
  4. ^ "Cuestiones básicas en aritmética de coma flotante y análisis de errores". 21 de octubre de 1999 . Consultado el 11 de abril de 2013 .
  5. ^ "Tercera edición de la Guía del usuario de LAPACK". 22 de agosto de 1999 . Consultado el 9 de marzo de 2012 .
  6. ^ "David Goldberg: Lo que todo informático debe saber sobre la aritmética de punto flotante, ACM Computing Surveys, volumen 23, n.º 1, marzo de 1991" (PDF) . Consultado el 11 de abril de 2013 .
  7. ^ "Documentación de Scilab - number_properties - determinar parámetros de punto flotante" . Consultado el 11 de abril de 2013 .
  8. ^ Jones, Derek M. (2009). El nuevo estándar C: un comentario económico y cultural (PDF) . pag. 377.
  9. ^ "referencia de float.h en cplusplus.com" . Consultado el 11 de abril de 2013 .
  10. ^ "referencia std::numeric_limits en cplusplus.com" . Consultado el 11 de abril de 2013 .
  11. ^ "Documentación de Python: parámetros y funciones específicos del sistema" . Consultado el 11 de abril de 2013 .
  12. ^ Pascal extendido ISO 10206:1990 (Informe técnico). El valor de epsreal será el resultado de restar 1,0 al valor más pequeño de tipo real que sea mayor que 1,0.
  13. ^ "Documentación de Mathematica: $ MachineEpsilon" . Consultado el 11 de abril de 2013 .
  14. ^ "Documentación de Matlab - eps - Precisión relativa de coma flotante". Archivado desde el original el 7 de agosto de 2013 . Consultado el 11 de abril de 2013 .
  15. ^ "Documentación de octava: función eps" . Consultado el 11 de abril de 2013 .
  16. ^ Higham, Nicolás (2002). Precisión y estabilidad de algoritmos numéricos (2 ed) . SIAM. págs. 27-28.
  17. ^ Quarteroni, Alfio ; Sacco, Ricardo; 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 .
  18. ^ Prensa, William H.; Teukolsky, Saúl A.; Vetterling, William T.; Flannery, Brian P. Recetas numéricas . pag. 890.
  19. ^ Engeln-Müllges, Gisela; Reutter, Fritz (1996). Algoritmos numéricos . pag. 6.ISBN _ 3-18-401539-4.
  20. ^ "Valor Epsilon de la máquina para prueba alternativa estándar de doble precisión IEEE utilizando error relativo". 12 de octubre de 2020 . Consultado el 5 de mayo de 2022 .

enlaces externos