Pređi na sadržaj

Gubitak značaja

S Vikipedije, slobodne enciklopedije

Gubitak značaja je nepoželjan efekat u proračunima koristeći finu preciznu aritmetiku kao što je aritmetika sa plutajućim tačkama. Pojavljuje se kada operacija na dva broja povećava relativnu grešku značajno više nego što povećava apsolutnu grešku, na primer u oduzimanju dva skoro jednaka broja (poznata kao katastrofalna otkazivanje). Efekat je da se broj značajnih cifara u rezultatu smanjuje neprihvatljivo. U numeričkoj analizi se istražuju načini za izbjegavanje ovog efekta.[1]

Demonstracija problema[uredi | uredi izvor]

Efekat se može pokazati decimalnim brojevima. Sledeći primer pokazuje gubitak značaja za tip podataka sa decimalnim brojem plutajućih mesta sa 10 značajnih cifara:[2]

Razmotrimo decimalni broj

 0,1234567891234567890

Predstavljanje ovog broja sa plutajućom tačkom na mašini koja drži 10 brojeva sa plutajućim tačkama biće

  0,1234567891

što je prilično blizu kada se meri greška kao procenat vrednosti. Veoma je drugačija kada se meri u redosledu preciznosti. Prvi je tačan na 10 × 10-20, dok je drugi tačan do 10 × 10-10. Sada izvršite obračun

0,1234567891234567890 − 0,1234567890000000000

Odgovor je tačan do 20 značajnih cifara

  0,0000000001234567890

Međutim, na mašini sa 10 cifara sa pokretnim zarezom, izračunavanje daje

  0,1234567891 − 0,1234567890 = 0,0000000001

U oba slučaja rezultat je tačan na isti red veličine kao i ulazi (-20 i -10). U drugom slučaju, čini se da je odgovor imao jednu značajnu cifru, što bi značilo gubitak značaja. Međutim, u računarskoj aritmetici sa plutajućim tačkama, sve operacije se mogu posmatrati kao izvršene na antilogaritama, za koje pravila za značajne brojke ukazuju na to da broj značajnih cifara ostaje isti kao i najmanji broj značajnih cifri u mantizama. Način na koji to ukazuje i predstavlja odgovor na 10 značajnih brojki je:

1,000000000×10−10

Rešenja[uredi | uredi izvor]

Moguće je izvoditi račune koristeći tačnu frakcionu reprezentaciju racionalnih brojeva i zadržati sve značajne cifre, ali ovo je često previše sporije od aritmetike sa plutajućim tačkama. Osim toga, obično samo odlaže problem: Šta ako su podaci tačni samo za deset cifara? Isti efekat će se dogoditi. Jedan od najvažnijih delova numeričke analize je da se izbegne ili minimiziraju gubitak značaja u proračunima. Ako je osnovni problem dobro postavljen, trebalo bi da postoji stabilan algoritam za njegovo rešavanje.[3]

Reference[uredi | uredi izvor]

  1. ^ Press, William H.; Flannery, Brian P.; Teukolsky, Saul A.; Vetterling, William T. (1992), Numerical Recipes in C (Second ed.), Section 5.6: "Quadratic and Cubic Equations.
  2. ^ Kahan, Willian (November 20, 2004), On the Cost of Floating-Point Computation Without Extra-Precise Arithmetic (PDF), retrieved 2012-12-25
  3. ^ Higham, Nicholas J., (2002). Accuracy and stability of numerical algorithms (2. izd.). Philadelphia: Society for Industrial and Applied Mathematics. ISBN 978-0-89871-521-7. OCLC 50022954.