stringtranslate.com

Dígito de guardia

En el análisis numérico , se pueden utilizar uno o más dígitos de protección para reducir la cantidad de error de redondeo .

Ejemplo

Supongamos que el resultado final de un cálculo largo de varios pasos se puede redondear con seguridad a N decimales. Es decir, el error de redondeo introducido por este redondeo final hace una contribución insignificante a la incertidumbre general.

Sin embargo, es muy probable que no sea seguro redondear los pasos intermedios del cálculo a la misma cantidad de dígitos. Tenga en cuenta que los errores de redondeo pueden acumularse. Si se utilizan M decimales en el cálculo intermedio, decimos que hay M−N dígitos de guarda.

En informática

Los dígitos de protección también se utilizan en operaciones de punto flotante en la mayoría de los sistemas informáticos.

Como ejemplo, considere la resta . Aquí, la notación del producto indica una representación binaria de punto flotante con el exponente de la representación dado como una potencia de dos y con la mantisa dada con tres bits después del punto binario. Para calcular la resta es necesario cambiar las formas de estos números para que tengan el mismo exponente, y para que cuando se expanda la notación del producto los números resultantes tengan sus puntos binarios alineados entre sí. Al cambiar el segundo operando a la posición , como , se le da un cuarto dígito después del punto binario. Esto crea la necesidad de agregar un dígito adicional al primer operando, un dígito de guarda, poniendo la resta en la forma .

Realizando esta operación se obtiene como resultado o .

Sin utilizar un dígito de guarda, la resta se realizaría con solo tres bits de precisión, como , lo que daría como resultado o , el doble del valor correcto. Por lo tanto, en este ejemplo, el uso de un dígito de guarda condujo a un resultado más preciso.

Un ejemplo del error causado por el redondeo de punto flotante se ilustra en el siguiente código C.

int principal (){ doble a ; int i ;      a = 0,2 ; a + = 0,1 ; a - = 0,3 ;           para ( i = 0 ; a < 1.0 ; i ++ ) a += a ;            printf ( "i=%d, a=%f \n " , i , a );   devuelve 0 ; } 

Parece que el programa no debería terminar. Sin embargo, el resultado es:

i=54, a=1.000000

Otro ejemplo es:

Tome dos números:

y

Elevamos el primer número a la misma potencia que el segundo:

La suma de los dos números es:

0,0256*10^22,3400*10^2 + ____________2,3656*10^2

Después de rellenar el segundo número (es decir, ) con dos s, el bit que sigue es el dígito de guarda y el bit que sigue es el dígito de redondeo. El resultado después del redondeo es opuesto a , sin los bits adicionales (bits de guarda y de redondeo), es decir, considerando solo . Por lo tanto, el error es .

Véase también

Referencias