Computational error due to rounding numbers
En informática , un error de redondeo , [1] también llamado error de redondeo , [2] es la diferencia entre el resultado producido por un algoritmo dado usando aritmética exacta y el resultado producido por el mismo algoritmo usando aritmética redondeada de precisión finita. [3] Los errores de redondeo se deben a la inexactitud en la representación de los números reales y las operaciones aritméticas que se realizan con ellos. Esta es una forma de error de cuantificación . [4] Cuando se utilizan ecuaciones o algoritmos de aproximación, especialmente cuando se utilizan un número finito de dígitos para representar números reales (que en teoría tienen un número infinito de dígitos), uno de los objetivos del análisis numérico es estimar los errores de cálculo. [5] Los errores de cálculo, también llamados errores numéricos , incluyen tanto errores de truncamiento como errores de redondeo.
Cuando se realiza una secuencia de cálculos con una entrada que involucra algún error de redondeo, los errores pueden acumularse, a veces dominando el cálculo. En problemas mal condicionados , se pueden acumular errores importantes. [6]
En resumen, hay dos facetas principales de los errores de redondeo involucrados en los cálculos numéricos: [7]
- La capacidad de las computadoras para representar tanto la magnitud como la precisión de los números es inherentemente limitada.
- Ciertas manipulaciones numéricas son muy sensibles a errores de redondeo. Esto puede deberse tanto a consideraciones matemáticas como a la forma en que las computadoras realizan operaciones aritméticas.
error de representación
El error que se introduce al intentar representar un número utilizando una cadena finita de dígitos es una forma de error de redondeo llamado error de representación . [8] Aquí hay algunos ejemplos de error de representación en representaciones decimales:
Aumentar el número de dígitos permitidos en una representación reduce la magnitud de los posibles errores de redondeo, pero cualquier representación limitada a un número finito de dígitos seguirá causando cierto grado de error de redondeo para una cantidad incontable de números reales. Los dígitos adicionales utilizados para los pasos intermedios de un cálculo se conocen como dígitos de guardia . [9]
Redondear varias veces puede provocar que se acumulen errores. [10] Por ejemplo, si 9,945309 se redondea a dos decimales (9,95) y luego se redondea nuevamente a un decimal (10,0), el error total es 0,054691. Redondear 9,945309 a un decimal (9,9) en un solo paso introduce menos error (0,045309). Esto puede ocurrir, por ejemplo, cuando el software realiza aritmética en punto flotante x86 de 80 bits y luego redondea el resultado a punto flotante IEEE 754 binario64 .
Sistema numérico de coma flotante
En comparación con el sistema numérico de punto fijo , el sistema numérico de punto flotante es más eficiente para representar números reales, por lo que se usa ampliamente en las computadoras modernas. Mientras que los números reales son infinitos y continuos, un sistema numérico de punto flotante es finito y discreto. Por tanto, en el sistema numérico de coma flotante se produce un error de representación, que conduce a un error de redondeo.![{\displaystyle \mathbb {R} }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle F}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Notación del sistema numérico de punto flotante
Un sistema numérico de coma flotante se caracteriza por números enteros:![{\displaystyle F}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 4}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
: base o raíz
: precisión
: rango de exponentes, donde es el límite inferior y el límite superior![{\displaystyle L}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle U}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Cualquiera tiene la siguiente forma: ![{\displaystyle x\en F}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle x=\pm (\underbrace {d_{0}.d_{1}d_{2}\ldots d_{p-1}} _{\text{significado}})_{\beta }\times \ beta ^{\overbrace {E} ^{\text{exponente}}}=\pm d_{0}\times \beta ^{E}+d_{1}\times \beta ^{E-1}+\ldots +d_{p-1}\times \beta ^{E-(p-1)}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\ Displaystyle d_ {i}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 0\leq d_{i}\leq \beta -1}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle i=0,1,\ldots,p-1}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle E}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle L\leq E\leq U}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Sistema normalizado de números flotantes
- Un sistema numérico de punto flotante está normalizado si el dígito inicial siempre es distinto de cero, a menos que el número sea cero. [3] Dado que el significado es , el significado de un número distinto de cero en un sistema normalizado satisface . Por lo tanto, la forma normalizada de un número de punto flotante IEEE distinto de cero es donde . En binario, el dígito inicial siempre es así que no se escribe y se llama bit implícito. Esto proporciona un poco más de precisión para reducir el error de redondeo causado por el error de representación.
![{\displaystyle d_{0}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle d_{0}.d_{1}d_{2}\ldots d_{p-1}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 1\leq {\text{significado}}<\beta }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \pm 1.bb\ldots b\times 2^{E}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle b\en {0,1}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 1}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- Dado que el sistema numérico de punto flotante es finito y discreto, no puede representar todos los números reales, lo que significa que los números reales infinitos solo pueden aproximarse mediante algunos números finitos mediante reglas de redondeo . Se puede denotar la aproximación en coma flotante de un número real dado por .
![{\displaystyle F}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle x}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle fl(x)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- El número total de números de punto flotante normalizados es
![{\displaystyle 2(\beta -1)\beta ^{p-1}(U-L+1)+1,}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
dónde
cuenta la elección del signo, ya sea positivo o negativo
cuenta la elección del dígito principal
cuenta los dígitos significativos restantes
cuenta la elección de exponentes
cuenta el caso cuando el número es .![{\displaystyle 0}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
estándar IEEE
En el estándar IEEE la base es binaria, es decir , y se utiliza la normalización. El estándar IEEE almacena el signo, el exponente y el significado en campos separados de una palabra de punto flotante, cada uno de los cuales tiene un ancho fijo (número de bits). Los dos niveles de precisión más utilizados para números de punto flotante son la precisión simple y la precisión doble. ![{\displaystyle \beta =2}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
maquina épsilon
La máquina épsilon se puede utilizar para medir el nivel de error de redondeo en el sistema numérico de punto flotante. Aquí hay dos definiciones diferentes. [3]
- El épsilon de máquina, denotado como , es el error relativo absoluto máximo posible al representar un número real distinto de cero en un sistema numérico de punto flotante.
![{\displaystyle \epsilon _ {\text{mach}}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle x}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \epsilon _{\text{mach}}=\max _{x}{\frac {|x-fl(x)|}{|x|}}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- La máquina épsilon, denotada por , es el número más pequeño tal que . Así, siempre que .
![{\displaystyle \epsilon _ {\text{mach}}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle\epsilon}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle fl(1+\epsilon )>1}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle fl(1+\delta )=fl(1)=1}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle |\delta |<\epsilon _ {\text{mach}}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Error de redondeo bajo diferentes reglas de redondeo
Hay dos reglas de redondeo comunes: redondeo por corte y redondeo al más cercano. El estándar IEEE utiliza redondeo al más cercano.
- Redondeo por corte : la expansión base de se trunca después del -ésimo dígito.
![{\displaystyle\beta}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle x}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle (p-1)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- Esta regla de redondeo está sesgada porque siempre mueve el resultado hacia cero.
- Redondear al más cercano : se establece en el número de punto flotante más cercano a . Cuando hay empate, se utiliza el número de coma flotante cuyo último dígito almacenado es par (además, el último dígito, en forma binaria, es igual a 0).
![{\displaystyle fl(x)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle x}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- Para el estándar IEEE donde la base es , esto significa que cuando hay un empate se redondea para que el último dígito sea igual a .
![{\displaystyle\beta}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 2}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 0}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- Esta regla de redondeo es más precisa pero más costosa desde el punto de vista computacional.
- Redondear de modo que el último dígito almacenado sea par cuando hay un empate garantiza que no se redondee hacia arriba o hacia abajo sistemáticamente. Esto es para tratar de evitar la posibilidad de una deriva lenta no deseada en cálculos largos debido simplemente a un redondeo sesgado.
- El siguiente ejemplo ilustra el nivel de error de redondeo según las dos reglas de redondeo. [3] La regla de redondeo, redondear al más cercano, conduce a un menor error de redondeo en general.
Calcular el error de redondeo en el estándar IEEE
Supongamos el uso de redondeo al más cercano y doble precisión IEEE.
- Ejemplo: el número decimal se puede reorganizar en
![{\displaystyle (9.4)_{10}=(1001.{\overline {0110}})_{2}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle +1.\underbrace {0010110011001100110011001100110011001100110011001100} _ {\text{52 bits}}110\ldots \times 2^{3}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Dado que el bit 53 a la derecha del punto binario es un 1 y está seguido por otros bits distintos de cero, la regla de redondeo al más cercano requiere redondear hacia arriba, es decir, agregar 1 bit al bit 52. Por lo tanto, la representación de punto flotante normalizada en el estándar IEEE 9.4 es
![{\displaystyle fl(9.4)=1.0010110011001100110011001100110011001100110011001101\times 2^{3}.}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- Ahora se puede calcular el error de redondeo al representar con .
![{\displaystyle 9.4}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle fl(9.4)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Esta representación se deriva descartando la cola infinita.
![{\displaystyle 0.{\overline {1100}}\times 2^{-52}\times 2^{3}=0.{\overline {0110}}\times 2^{-51}\times 2^{ 3}=0,4\veces 2^{-48}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 1\times 2^{-52}\times 2^{3}=2^{-49}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- Entonces .
![{\displaystyle fl(9.4)=9.4-0.4\times 2^{-48}+2^{-49}=9.4+(0.2)_{10}\times 2^{-49}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- Por tanto, el error de redondeo es .
![{\displaystyle (0,2\times 2^{-49})_{10}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Medición del error de redondeo utilizando la máquina épsilon
La máquina épsilon se puede utilizar para medir el nivel de error de redondeo cuando se utilizan las dos reglas de redondeo anteriores. A continuación se muestran las fórmulas y la prueba correspondiente. [3] Aquí se utiliza la primera definición de máquina épsilon.![{\displaystyle \epsilon _ {\text{mach}}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Teorema
- Ronda por tajada:
![{\displaystyle \epsilon _{\text{mach}}=\beta ^{1-p}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- Redondeo al más cercano:
![{\displaystyle \epsilon _{\text{mach}}={\frac {1}{2}}\beta ^{1-p}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Prueba
Sea donde y sea la representación en punto flotante de . Dado que se utiliza redondo por corte, es![{\displaystyle x=d_{0}.d_{1}d_{2}\ldots d_{p-1}d_{p}\ldots \times \beta ^{n}\in \mathbb {R} }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle n\en [L,U]}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle fl(x)}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle x}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle {\begin{alineado}{\frac {|x-fl(x)|}{|x|}}&={\frac {|d_{0}.d_{1}d_{2}\ldots d_{p-1}d_{p}d_{p+1}\ldots \times \beta ^{n}-d_{0}.d_{1}d_{2}\ldots d_{p-1}\times \beta ^{n}|}{|d_{0}.d_{1}d_{2}\ldots \times \beta ^{n}|}}\\&={\frac {|d_{p}. d_{p+1}\ldots \times \beta ^{np}|}{|d_{0}.d_{1}d_{2}\ldots \times \beta ^{n}|}}\\&= {\frac {|d_{p}.d_{p+1}d_{p+2}\ldots |}{|d_{0}.d_{1}d_{2}\ldots |}}\times \beta ^{-p}\end{alineado}}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle d_{0}\neq 0}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 1}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle (\beta -1).(\beta -1){\overline {(\beta -1)}}=\beta }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle {\frac {|x-fl(x)|}{|x|}}\leq {\frac {\beta }{1}}\times \beta ^{-p}=\beta ^{1 -pags}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \epsilon =\beta ^{1-p}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- Tenga en cuenta que la primera definición de máquina épsilon no es del todo equivalente a la segunda definición cuando se utiliza la regla de redondeo al más cercano, pero sí es equivalente para redondeo por corte.
Error de redondeo causado por la aritmética de punto flotante
Incluso si algunos números se pueden representar exactamente mediante números de punto flotante y dichos números se denominan números de máquina , realizar aritmética de punto flotante puede provocar un error de redondeo en el resultado final.
Suma
La suma automática consiste en alinear los puntos decimales de los dos números a sumar, sumarlos y luego almacenar nuevamente el resultado como un número de coma flotante. La suma en sí se puede realizar con mayor precisión, pero el resultado debe redondearse a la precisión especificada, lo que puede provocar un error de redondeo. [3]
- Por ejemplo, agregando en IEEE doble precisión de la siguiente manera, esto se guarda ya que el redondeo al más cercano se usa en el estándar IEEE. Por lo tanto, es igual a doble precisión en IEEE y el error de redondeo es .
![{\displaystyle 1}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 2^{-53}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle {\begin{aligned}1,00\ldots 0\times 2^{0}+1,00\ldots 0\times 2^{-53}&=1.\underbrace {00\ldots 0} _ {\text{ 52 bits}}\times 2^{0}+0.\underbrace {00\ldots 0} _ {\text{52 bits}}1\times 2^{0}\\&=1.\underbrace {00\ ldots 0} _{\text{52 bits}}1\times 2^{0}.\end{aligned}}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 1.\underbrace {00\ldots 0} _{\text{52 bits}}\times 2^{0}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 1+2^{-53}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 1}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 2^{-53}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Este ejemplo muestra que se puede introducir un error de redondeo al sumar un número grande y un número pequeño. El desplazamiento de los puntos decimales en los significados para que los exponentes coincidan provoca la pérdida de algunos de los dígitos menos significativos. La pérdida de precisión puede describirse como absorción . [11]
Tenga en cuenta que la suma de dos números de punto flotante puede producir un error de redondeo cuando su suma es un orden de magnitud mayor que la del mayor de los dos.
- Por ejemplo, considere un sistema numérico de punto flotante normalizado con base y precisión . Entonces y . Tenga en cuenta que pero . Hay un error de redondeo de .
![{\displaystyle 10}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 2}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle fl(62)=6,2\times 10^{1}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle fl(41)=4,1\times 10^{1}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 62+41=103}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle fl(103)=1,0\times 10^{2}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 103-fl(103)=3}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Este tipo de error puede ocurrir junto con un error de absorción en una sola operación.
Multiplicación
En general, el producto de dos significados de p dígitos contiene hasta 2p dígitos, por lo que es posible que el resultado no se ajuste al significado. [3] Por lo tanto, el error de redondeo estará involucrado en el resultado.
- Por ejemplo, considere un sistema numérico de punto flotante normalizado con la base y los dígitos significativos como máximo . Entonces y . Tenga en cuenta eso , pero ya que hay como máximo dígitos significativos. El error de redondeo sería .
![{\displaystyle\beta =10}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 2}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle fl(77)=7,7\times 10^{1}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle fl(88)=8,8\times 10^{1}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 77\times 88=6776}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle fl(6776)=6,7\times 10^{3}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 2}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 6776-fl(6776)=6776-6.7\times 10^{3}=76}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
División
En general, el cociente de significados de 2p dígitos puede contener más de p dígitos. Por lo tanto, el resultado implicará un error de redondeo.
- Por ejemplo, si todavía se utiliza el sistema numérico normalizado de punto flotante anterior, entonces pero . Entonces, se corta la cola.
![{\displaystyle 1/3=0,333\ldots }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle fl(1/3)=fl(0,333\ldots )=3,3\times 10^{-1}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 0,333\ldots -3,3\times 10^{-1}=0,00333\ldots }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Sustracción
La absorción también se aplica a la resta.
- Por ejemplo, restando en IEEE la doble precisión de la siguiente manera,
![{\displaystyle 2^{-60}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 1}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle {\begin{aligned}1,00\ldots 0\times 2^{0}-1,00\ldots 0\times 2^{-60}&=\underbrace {1,00\ldots 0} _ {\text{60 bits }}\times 2^{0}-\underbrace {0.00\ldots 01} _{\text{60 bits}}\times 2^{0}\\&=\underbrace {0.11\ldots 1} _{\text {60 bits}}\veces 2^{0}.\end{aligned}}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Esto se guarda ya que el redondeo al más cercano se utiliza en el estándar IEEE. Por lo tanto, es igual a doble precisión en IEEE y el error de redondeo es .![{\displaystyle \underbrace {1.00\ldots 0} _{\text{53 bits}}\times 2^{0}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 1-2^{-60}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 1}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle -2^{-60}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
La resta de dos números casi iguales se llama cancelación sustractiva . [3]
Cuando se cancelan los dígitos iniciales, el resultado puede ser demasiado pequeño para representarse exactamente y simplemente se representará como . ![{\displaystyle 0}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- Por ejemplo, aquí se utiliza let y la segunda definición de máquina épsilon. ¿Cuál es la solución ? Se sabe que y son números casi iguales, y . Sin embargo, en el sistema numérico de punto flotante, . Aunque es lo suficientemente grande como para ser representado, ambas instancias se han redondeado dando .
![{\displaystyle |\epsilon |<\epsilon _{\text{mach}}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle (1+\epsilon )-(1-\epsilon )}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 1+\epsilon }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 1-\epsilon }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle (1+\epsilon )-(1-\epsilon )=1+\epsilon -1+\epsilon =2\epsilon }](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle fl((1+\epsilon )-(1-\epsilon ))=fl(1+\epsilon )-fl(1-\epsilon )=1-1=0}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 2\épsilon}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle\epsilon}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 0}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Incluso con un tamaño algo mayor , el resultado en casos típicos sigue siendo muy poco fiable. No hay mucha fe en la exactitud del valor porque la mayor incertidumbre en cualquier número de punto flotante son los dígitos del extremo derecho. ![{\displaystyle\epsilon}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
- Por ejemplo, . El resultado es claramente representable, pero no hay mucha fe en él.
![{\displaystyle 1,99999\times 10^{2}-1,99998\times 10^{2}=0,00001\times 10^{2}=1\times 10^{-5}\times 10^{2}=1\times 10^{-3}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle 1\times 10^{-3}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Esto está estrechamente relacionado con el fenómeno de la cancelación catastrófica , en el que se sabe que las dos cifras son aproximaciones.
Acumulación de error de redondeo
Los errores pueden magnificarse o acumularse cuando se aplica una secuencia de cálculos en una entrada inicial con un error de redondeo debido a una representación inexacta.
Algoritmos inestables
Un algoritmo o proceso numérico se denomina estable si pequeños cambios en la entrada sólo producen pequeños cambios en la salida, e inestable si se producen grandes cambios en la salida. [12] Por ejemplo, el cálculo del uso del método "obvio" es casi inestable debido al gran error introducido al restar dos cantidades similares, mientras que la expresión equivalente es estable. [12]![{\displaystyle f(x)={\sqrt {1+x}}-1}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle x=0}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![{\displaystyle \textstyle {f(x)={\frac {x}{{\sqrt {1+x}}+1}}}}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Problemas mal condicionados
Incluso si se utiliza un algoritmo estable, la solución a un problema puede seguir siendo inexacta debido a la acumulación de errores de redondeo cuando el problema en sí está mal condicionado .
El número de condición de un problema es la relación entre el cambio relativo en la solución y el cambio relativo en la entrada. [3] Un problema está bien condicionado si pequeños cambios relativos en los datos de entrada dan como resultado pequeños cambios relativos en la solución. De lo contrario, el problema está mal condicionado . [3] En otras palabras, un problema está mal condicionado si su número de condición es "mucho mayor" que 1.
El número de condición se introduce como una medida de los errores de redondeo que pueden resultar al resolver problemas mal condicionados. [7]
Ver también
Referencias
- ^ Butt, Rizwan (2009), Introducción al análisis numérico mediante MATLAB, Jones & Bartlett Learning, págs. 11-18, ISBN 978-0-76377376-2
- ^ Ueberhuber, Christoph W. (1997), Computación numérica 1: métodos, software y análisis, Springer, págs. 139-146, ISBN 978-3-54062058-7
- ^ abcdefghij Forrester, Dick (2018). Métodos numéricos Math/Comp241 (notas de clase) . Universidad Dickinson .
- ^ Aksoy, Pelin; DeNardis, Laura (2007), Tecnología de la información en teoría, Cengage Learning, pág. 134, ISBN 978-1-42390140-2
- ^ Ralston, Antonio; Rabinowitz, Philip (2012), Un primer curso de análisis numérico, Dover Books on Mathematics (2ª ed.), Courier Dover Publications, págs. 2–4, ISBN 978-0-48614029-2
- ^ Chapman, Stephen (2012), Programación MATLAB con aplicaciones para ingenieros, Cengage Learning, p. 454, ISBN 978-1-28540279-6
- ^ ab Chapra, Steven (2012). Métodos numéricos aplicados con MATLAB para ingenieros y científicos (3ª ed.). McGraw-Hill . ISBN 9780073401102.
- ^ Laplante, Philip A. (2000). Diccionario de Informática, Ingeniería y Tecnología. Prensa CRC . pag. 420.ISBN _ 978-0-84932691-2.
- ^ Higham, Nicolás John (2002). Precisión y estabilidad de algoritmos numéricos (2 ed.). Sociedad de Matemática Industrial y Aplicada (SIAM). págs. 43–44. ISBN 978-0-89871521-7.
- ^ Volkov, EA (1990). Métodos numéricos. Taylor y Francisco . pag. 24.ISBN _ 978-1-56032011-1.
- ^ Birán, Adrián B.; Breiner, Moshe (2010). "5". Lo que todo ingeniero debe saber sobre MATLAB y Simulink . Boca Ratón , Florida : CRC Press . págs. 193-194. ISBN 978-1-4398-1023-1.
- ^ ab Collins, Charles (2005). "Condición y Estabilidad" (PDF) . Departamento de Matemáticas de la Universidad de Tennessee . Consultado el 28 de octubre de 2018 .
Otras lecturas
- Matt Parker (2021). Humble Pi: Cuando las matemáticas van mal en el mundo real . Libros de Riverhead. ISBN 978-0593084694.
enlaces externos
- Error de redondeo en MathWorld.
- Goldberg, David (marzo de 1991). "Lo que todo informático debería saber sobre la aritmética de punto flotante" (PDF) . Encuestas de Computación ACM . 23 (1): 5–48. doi :10.1145/103162.103163. S2CID 222008826 . Consultado el 20 de enero de 2016 .([1], [2])
- 20 desastres de software famosos