Maquina épsilon
Máquina epsilon o máquina de precisión es un límite superior en el error relativo de aproximación debido a redondeo en los sistemas de número de punto flotante. Este valor caracteriza 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 griego epsilon ε ε {displaystyle varepsilon }.
Hay dos definiciones prevalecientes, denotadas aquí como epsilon de máquina de redondeo y epsilon de máquina de intervalo. La máquina epsilon depende del tipo de redondeo utilizado y también se llama redondeo de unidad, que tiene el símbolo bold Roman u. Sin embargo, en la definición comúnmente utilizada, la máquina epsilon es independiente del método de redondeo, y puede ser equivalente a u o 2u.
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.
IEEE 754 - 2008 | Nombre común | Tipo de datos C++ | Base b{displaystyle b} | Precisión p{displaystyle p} | Máquina de redondeo epsilon b− − ()p− − 1)/2{displaystyle b^{-(p-1)}/2} | Interval machine epsilon b− − ()p− − 1){displaystyle b^{-(p-1)} |
---|---|---|---|---|---|---|
binario16 | media precisión | N/A | 2 | 11 (un poco es implícito) | 2−11 - ■ 4.88e-04 | 2−10 ♥ 9.77e-04 |
binario32 | precisión única | flotador | 2 | 24 (un poco es implícito) | 2−24− Entendido 5.96e-08 | 2,23 a 23 ■ 1.19e-07 |
binario64 | doble precisión | doble | 2 | 53 (un poco es implícito) | 2.53− ■ 1.11e-16 | 2−52 2.22e-16 |
precisión extendida, doble largo | _float80 | 2 | 64 | 2−64 ■ 5.42e-20 | 2−63− ■ 1.08e-19 | |
binario128 | cuád(ruple) precisión | _float128 | 2 | 113 (un poco es implícito) | 2−113 ■ 9.63e-35 | 2−112 ■ 1.93e-34 |
decimal32 | simple precisión decimal | _Decimal32 | 10 | 7 | 5 × 10−7 | 10−6 |
decimal64 | doble precisión decimal | _Decimal64 | 10 | 16 | 5 × 10−16 | 10−15 |
decimal128 | quad(ruple) precisión decimal | _Decimal128 | 10 | 34 | 5 × 10−34− | 10−33 |
- ^ De acuerdo con la definición formal — utilizada por el Prof. Demmel, LAPACK y Scilab. Representa a la mayor error relativo redondeo en modo redondo a defensa. La lógica es que error de redondeo es la mitad del intervalo hacia arriba al siguiente número representable en la precisión finita. Así, el relativo error de redondeo para el número x{displaystyle x} es [interval/2]/x{displaystyle [interval/2]/x}. En este contexto, el más grande error relativo ocurre cuando x=1.0{displaystyle x=1.0}, y es igual [ULP()1.0)/2]/1.0{displaystyle [ULP(1.0)/2]/1.0}, porque los números reales en la mitad inferior del intervalo 1.0 ~ 1.0+ULP(1) se redondean hasta 1.0, y los números en la mitad superior del intervalo se redondean hasta 1.0+ULP(1). Aquí utilizamos la definición de ULP(1) (Unit in Last Place) como la diferencia positiva entre 1.0 (que se puede representar exactamente en la precisión finita) y el siguiente número mayor representable en la precisión finita.
- ^ De acuerdo con la definición principal — utilizada por el Prof. Higham; aplicado en constantes de idiomas en Ada, C, C++, Fortran, MATLAB, Mathematica, Octave, Pascal, Python y Rust etc., y definido en libros de texto como «Recetas Núcleas» por Press et. Representa a la mayor intervalo relativo entre dos números más cercanos en la precisión finita, o el mayor error de redondeo en modo redondeado por opción. La lógica es que relativo intervalo para el número x{displaystyle x} es [interval]/x{displaystyle [interval]/x} Donde interval{displaystyle interval} es la distancia hacia arriba el siguiente número representable en la precisión finita. En este contexto, el más grande intervalo relativo ocurre cuando x=1.0{displaystyle x=1.0}, y es el intervalo entre 1.0 (que se puede representar exactamente en la precisión finita) y el próximo número de puntos de flotación representable más grande. Este intervalo es igual al ULP(1).
Definición formal (Máquina redondeadora épsilon)
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 necesita algún fondo para determinar un valor de esta definición. Un sistema de número de puntos flotantes se caracteriza por un radio que también se llama la base, b{displaystyle b}, y por la precisión p{displaystyle p}, es decir, el número de radio b{displaystyle b} dígitos del significado (incluyendo cualquier parte implícita líder). Todos los números con el mismo exponente, e{displaystyle e}, tener el espaciado, be− − ()p− − 1){displaystyle b^{e-(p-1)}. El espaciado cambia a los números que son poderes perfectos b{displaystyle b}; el espaciado en el lado de mayor magnitud es b{displaystyle b} tiempos más grandes que el espaciamiento en el lado de menor magnitud.
Puesto que la epsilon de la máquina es un límite para error relativo, basta considerar números con exponente e=0{displaystyle e=0}. También basta considerar números positivos. Para el tipo de redondeo habitual, el error absoluto de redondeo es a la mayoría de la mitad del espaciado, o b− − ()p− − 1)/2{displaystyle b^{-(p-1)}/2}. Este valor es el numerador más grande posible para el error relativo. El denominador en el error relativo es el número que se está redondeando, que debe ser lo más pequeño posible para hacer el error relativo grande. Por lo tanto, el peor error relativo ocurre cuando el redondeo se aplica a números de la forma 1+a{displaystyle 1+a} Donde a{displaystyle a} es entre 0{displaystyle 0} y b− − ()p− − 1)/2{displaystyle b^{-(p-1)}/2}. Todos estos números rondan 1{displaystyle 1} con error relativo a/()1+a){displaystyle a/(1+a)}. El máximo ocurre cuando a{displaystyle a} está en el extremo superior de su gama. El 1+a{displaystyle 1+a} en el denominador es insignificante comparado con el numerador, por lo que se deja fuera para la conveniencia, y sólo b− − ()p− − 1)/2{displaystyle b^{-(p-1)}/2} se toma como epsilón de la máquina. Como se ha demostrado aquí, el error relativo es peor para los números que rondan a 1{displaystyle 1}, por lo que la máquina epsilon también se llama redondeo de unidad significa aproximadamente "el error máximo que puede ocurrir cuando se redondea al valor unitario".
Así, el espaciamiento máximo entre un número de punto flotante normalizado, x{displaystyle x}, y un número normalizado adyacente es 2ε ε SilencioxSilencio{displaystyle 2varepsilon Silencioso.
Modelo aritmético
Análisis numérico utiliza epsilón de máquina para estudiar los efectos del error de redondeo. Los errores reales de la máquina aritmética son demasiado complicados para ser estudiados directamente, por lo que en cambio, se utiliza el siguiente modelo simple. El estándar aritmético de IEEE dice que todas las operaciones de punto flotante se hacen 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. Suppose (1) x{displaystyle x}, Sí.{displaystyle y} son números de puntos flotantes, (2) ∙ ∙ {displaystyle bullet } es una operación aritmética en números de punto flotante, como adición o multiplicación, y (3) ∘ ∘ {displaystyle circ } es la operación de precisión infinita. Según el estándar, el ordenador calcula:
- x∙ ∙ Sí.=redonda()x∘ ∘ Sí.){displaystyle xbullet y={mbox{round}(xcirc y)}
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:
- x∙ ∙ Sí.=()x∘ ∘ Sí.)()1+z){displaystyle xbullet y=(xcirc y)(1+z)}
Donde z{displaystyle z} en magnitud absoluta ε ε {displaystyle varepsilon } o u. Los libros de Demmel y Higham en las referencias se pueden consultar para ver cómo se utiliza este modelo para analizar los errores de, por ejemplo, eliminación gausiana.
Definición convencional (máquina de intervalos épsilon)
El estándar IEEE no define los términos máquina épsilon y redondeo unitario, por lo que se utilizan diferentes definiciones de estos términos, lo que puede causar cierta confusión.
La definición formal de máquina épsilon es la utilizada por el profesor James Demmel en guiones de conferencias, el paquete de álgebra lineal LAPACK, artículos de investigación numérica y algunos programas informáticos científicos. . 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: máquina épsilon es la diferencia entre 1 y el siguiente número de punto flotante más grande.
Por esta definición, ε iguala el valor de la unidad en el último lugar relativo a 1, es decir. b− − ()p− − 1){displaystyle b^{-(p-1)} (donde) b es la base del sistema de puntos flotantes y p es la precisión) y la unidad de redondeo es u = ε / 2, asumiendo el modo redondo a juego, y u = ε, suponiendo una vuelta por vuelta.
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 y las constantes correspondientes en otros lenguajes de programación. También se utiliza ampliamente en software informático científico y en la literatura numérica e informática.
Cómo determinar la máquina épsilon
Donde 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> hace con std::numeric_limits<T>::epsilon()
en C++), la mejor manera de determinar el épsilon de la máquina es consultar la tabla , arriba, y utilice la fórmula de potencia adecuada. La máquina de computación épsilon a menudo se presenta como ejercicio de libro de texto. Los siguientes ejemplos calculan épsilon de máquina de intervalo en el sentido del espaciado de los números de punto flotante en 1 en lugar de en el sentido del redondeo unitario.
Tenga en cuenta que los resultados dependen del formato de punto flotante particular utilizado, como float
, double
, long double
o similar, según se admita. por 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 un sentido estricto el término máquina epsilon significa que 1+ε ε {displaystyle 1+varepsilon } precisión apoyada directamente por el procesador (o coprocesador), no algunos 1+ε ε {displaystyle 1+varepsilon } precisión apoyada por un compilador específico para un sistema operativo específico, a menos que se sepa utilizar el mejor formato.
IEEE 754 formatos de punto flotante tienen la propiedad que, al reinterpretar como un entero de dos complementos de la misma anchura, aumentan monotonicamente sobre valores positivos y disminuyen monotonicamente sobre valores negativos (ver la representación binaria de 32 bits flotantes). También tienen la propiedad que <math alttext="{displaystyle 0<|f(x)|0c)Silenciof()x)Silencioc)JUEGO JUEGO {displaystyle 0 Seguido(x)<img alt="{displaystyle 0<|f(x)|, y Silenciof()x+1)− − f()x)Silencio≥ ≥ Silenciof()x)− − f()x− − 1)Silencio{displaystyle Silenciof(x+1)-f(x) (donde) f()x){displaystyle f(x)} es la reinterpretación del entero antes mencionada x{displaystyle x}). En idiomas que permiten punning tipo y siempre utilizan IEEE 754–1985, podemos explotar esto para calcular un epsilón de máquina en tiempo constante. Por ejemplo, en C:
Tipodef sindicato {} largo largo i64; doble d64;} dbl_64;doble machine_eps ()doble valor){} dbl_64 s; s.d64 = valor; s.i64++; Regreso s.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:
Regreso ()s.i64 c) 0 ? valor - s.d64 : s.d64 - valor);
Ejemplo en Python:
def máquinaEpsilon()func=flotador): machine_epsilon = func()1) mientras func()1) + machine_epsilon ! func()1): machine_epsilon_last = machine_epsilon machine_epsilon = func()machine_epsilon) / func()2) Regreso 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 la máquina épsilon, dentro de un factor de dos (un orden de magnitud) de su valor verdadero, utilizando una búsqueda lineal.
epsilon = 1.0; (1.0 + 0.5 * epsilon) ل 1.0: epsilon = 0,5 * epsilon
La máquina epsilon, ε ε mach mach{textstyle varepsilon _{mach}} también se puede calcular simplemente como dos al poder negativo del número de bits utilizados para el mantissa.
Relación con el error relativo absoluto
Si Sí.{textstyle y} es la representación automática de un número x{textstyle x} entonces el error relativo absoluto en la representación es Silenciox− − Sí.xSilencio≤ ≤ ε ε mach mach.{textstyle lefttención{dfrac {x-y}{x} 'justo en la vidaleq varepsilon _{text{mach}}
Prueba
La siguiente prueba se limita a números positivos y representaciones de máquinas que utilizan ronda por corte.
Si x{textstyle x} es un número positivo que queremos representar, será entre un número de máquina xb{textstyle x_{b}} infra x{textstyle x} y número de máquina xu{textstyle x_{u} arriba x{textstyle x}.
Si xb=()1.b1b2... ... bm)2× × 2k{textstyle x_{b}=left(1.b_{1}b_{2}ldots ¿Qué?, donde m{textstyle m} es el número de bits utilizados para la magnitud del significado, entonces:
Desde la representación de x{textstyle x} será xb{textstyle x_{b}} o xu{textstyle x_{u},
Aunque esta prueba se limita a números positivos y redondeo por corte, se puede utilizar el mismo método para demostrar la desigualdad en relación con números negativos y representaciones de máquina de redondeo a más cercano.
Notas y referencias
- ^ a b Tipos de flotación - Utilizando la colección de compiladores GNU (GCC)
- ^ a b c Flota decimal - Utilizando la colección de compiladores GNU (GCC)
- ^ "Problemas básicos en el punto de inundación Aritmética y Análisis de Errores". Universidad de California, Berkeley. 21 de octubre de 1999. Retrieved 11 de junio 2022.
La distancia entre 1 y el siguiente número de punto flotante más grande es 2*macheps.
- ^ "Problemas básicos en el punto de inundación Aritmética y Análisis de Errores". 21 Oct 1999. Retrieved 11 de abril 2013.
- ^ "LAPACK Users' Guide Third Edition". 22 agosto 1999. Retrieved 9 de marzo 2012.
- ^ "David Goldberg: Lo que cada científico de la computadora debe saber acerca de la aritmética del punto flotante, encuestas de computación ACM, vol 23, no 1, marzo 1991" (PDF). Retrieved 11 de abril 2013.
- ^ "Documentación de los laboratorios - number_properties - determinar parámetros de punto flotante". Retrieved 11 de abril 2013.
- ^ Jones, Derek M. (2009). El nuevo estándar C - un comentario económico y cultural (PDF)Pág. 377.
- ^ "float.h referencia en cplus.com". Retrieved 11 de abril 2013.
- ^ "std::numeric_limits reference at cplus.com". Retrieved 11 de abril 2013.
- ^ "Python documentation - Parámetros y funciones específicas del sistema". Retrieved 11 de abril 2013.
- ^ Extended Pascal ISO 10206:1990 (Informe técnico).
El valor de epsreal será el resultado de la subtracción 1.0 del valor más pequeño de tipo real que es mayor que 1.0.
- ^ "Mathematica documentation: $MachineEpsilon". Retrieved 11 de abril 2013.
- ^ "Matlab documentation - eps - Precisión relativa de punto flotante". Archivado desde el original el 2013-08-07. Retrieved 11 de abril 2013.
- ^ "Documentación octava - función eps". Retrieved 11 de abril 2013.
- ^ Higham, Nicholas (2002). Precisión y estabilidad de los algoritmos numéricos (2 ed). SIAM. pp. 27–28.
- ^ Quarteroni, Alfio; Sacco, Riccardo; Saleri, Fausto (2000). Matemáticas numéricas (PDF). Springer. p. 49. ISBN 0-387-98959-5. Archivado desde el original (PDF) on 2017-11-14. Retrieved 2013-04-11.
- ^ Press, William H.; Teukolsky, Saul A.; Vetterling, William T.; Flannery, Brian P. Recetas numéricasP. 890.
- ^ Engeln-Müllges, Gisela; Reutter, Fritz (1996). Numerik-Algorithmen. p. 6. ISBN 3-18-401539-4.
- ^ "Machine Epsilon Value for IEEE Double Precision Standard Alternative Proof Using Relative Error" 12 octubre 2020. Retrieved 5 de mayo 2022.