În analiza numerică se arată cum folosirea uneia sau mai multor cifre de gardă poate reduce eroarea de rotunjire.
Descriere Fie presupunerea că rezultatul final al unui calcul lung, în mai mulți pași, poate fi rotunjit în siguranță la zecimale. Adică, eroarea de rotunjire introdusă de această rotunjire finală are o contribuție neglijabilă la incertitudinea generală.
Totuși, este foarte probabil să nu fie „sigur” să fie rotunjite la același număr de cifre numere în etapele intermediare de calcul, deoarece aceste erori de rotunjire se pot acumula. Dacă în calculele intermediare se utilizează zecimale, se spune că există cifre de gardă.
În informatică Cifrele de gardă sunt folosite și în operațiunile în virgulă mobilă din majoritatea sistemelor de calcul.
Ca exemplu, fie scăderea . Aici, notația produsului indică o reprezentare binară în virgulă mobilă, cu exponentul reprezentării dat ca o putere a lui doi și cu mantisa pe trei biți după virgula binară. Pentru a calcula scăderea, este necesar să se schimbe formele acestor numere astfel încât să aibă același exponent și astfel încât numerele rezultate să aibă virgulele lor binare aliniate între ele. Deplasarea celui de-al doilea operand în poziție, ca , îi dă o a patra cifră după virgula binară. Aceasta creează necesitatea de a adăuga o cifră suplimentară la primul operand – o cifră de gardă – punând scăderea sub forma .
Fără utilizarea unei cifre de gardă, scăderea s-ar efectua doar cu o precizie de trei biți, adică rezultând sau de două ori mai mare decât rezultatul corect. Astfel, în acest exemplu, utilizarea unei cifre de gardă a condus la un rezultat mai precis.
Un exemplu de eroare cauzată de rotunjirea în virgulă mobilă este ilustrat în următorul cod C. int main(){ double a; int i;
a = 0.2; a += 0.1; a -= 0.3;
for (i = 0; a < 1.0; i++) a += a;
printf("i=%d, a=%f\n", i, a);
return 0; } La prima vedere pare că programul nu ar trebui să se termine niciodată, deoarece operațiile cerute „bat pasul pe loc” în ciclu. Totuși, rezultatul este: i=54, a=1.000000
Alt exemplu este:
Fie două numere: și
Se aduce primul număr la aceeași putere a lui cu cea a lui al doilea:
Adunarea celor două numere este: 0.0256*10^2 2.3400*10^2 + ____________ 2.3656*10^2
După completarea celui de-al doilea număr (adică ) cu doi de bitul de după este cifra de gardă, iar următorul bit este cifra de rotunjire. Rezultatul după rotunjire este 2,37, spre deosebire de 2,36, cât ar fi fără biții suplimentari (biții de gardă și de rotunjire), adică dacă s-ar lua în considerare doar 0,02 + 2,34 = 2,36. Prin urmare, eroarea este de 0,01.
Note
Bibliografie Forman S. Acton. Numerical Methods that Work, The Mathematical Association of America (August 1997). Higham, Nicholas J. Accuracy and Stability of Numerical Algorithms, Washington D.C.: Society for Industrial & Applied Mathematics, 2002.
Categorie:Analiză numerică Categorie:Aritmetica calculatoarelor