next up previous contents index
Next: Točno zaokružene operacije Up: Još o greškama Previous: Realni brojevi   Sadržaj   Indeks

Relativna greška

$\displaystyle \frac{\vert z-z'\vert}{z}.$

U zapisu pomoću pomičnog zareza je

$\displaystyle z' = d.ddd\ldots{}d\times \beta{}^e,$

pa je relativna greška

$\displaystyle \frac{\vert z-d.ddd\ldots{}d\times \beta{}^e\vert}{z}.$

Ako je $ z'$ najbolja moguća aproksimacija broja $ z,$ onda je apsolutna greška (brojnik ovog razlomka) najviše

$\displaystyle \underbrace{0.000\ldots{}0}_{p\,\text{nula}}\frac{\beta{}}{2} \times
\beta{}^e = \frac{\beta{}}{2}\,\beta{}^{-p} \times \beta{}^e.$

Brojevi oblika $ d.ddd\ldots{}d\times \beta{}^e$ se nalaze između $ \beta{}^e$ i $ \beta{}\,\beta{}^e.$ Prema tome najveća moguća relativna greška je

$\displaystyle \frac{\frac{\beta{}}{2}\,\beta{}^{-p} \times \beta{}^e}{\beta{}^e} =
\frac{\beta{}}{2}\,\beta{}^{-p} = \varepsilon{}.$

Ovaj broj se zove kompjuterski epsilon. Najmanja moguća relativna greška je

$\displaystyle \frac{\frac{\beta{}}{2}\,\beta{}^{-p} \times \beta{}^e}{\beta{}\,\beta{}^e} =
\frac{1}{2}\,\beta{}^{-p}.$

Tako je

$\displaystyle \frac{1}{2}\,\beta{}^{-p} \leqslant{} \frac{\vert z-d.ddd\ldots{}d\times
\beta{}^e\vert}{z} \leqslant{} \frac{\beta{}}{2}\,\beta{}^{-p}.$

Osim relativnom greškom, grešku možemo mjeriti i jedinicom ulp (units in the last place). Ako je format $ (\beta{},p),$ onda se greška u ulpima izražava formulom

$\displaystyle \left\vert\frac{z}{\beta{}^e} - d.ddd\ldots{}d\right\vert\,\beta{}^{p-1}.$

Primjer 3.24   Neka je format $ (10,3),$ $ z=0.0314,$ i $ z'=3.12\times{}10^{-2}.$ Naći grešku u ulpima.

Rješenje. $ d.dd = 3.12.$ Zatim $ e=-2.$ Odatle

$\displaystyle \left\vert\frac{0.0314}{10^{-2}} - 3.12\right\vert\,10^{2} = 0.02 \times{}
10^2 = 2\,$ulpa$\displaystyle .$

Greška u ulpima omogućava da odredimo broj nepouzdanih znamenki u približnoj vrijednosti $ z'$ broja $ z.$ Ako je greška $ n$ ulpa, onada je broj nepouzdanih znamenki

$\displaystyle \log_\beta{}n.$

Primjer 3.25   U formatu $ (10,3)$ treba izračunati $ x-y,$ ako je $ x=10.1,$ $ y=9.93,$ i odrediti broj nepouzdanih znamenki približne vrijednosti.

Rješenje. Prilikom zbrajanja ili odbijanja manji broj svodimo na potenciju baze većega, i zatim zbrajamo samo signifikande

$\displaystyle x = 10.1 = 1.01\times{}10^1$   i$\displaystyle \quad y = 9.93 =
0.993\times{}10^1.$

Odatle

$\displaystyle x' = 1.01\times{}10^1$   i$\displaystyle \quad y = 0.99\times{}10^1.$

Tako je

$\displaystyle x' - y' = 0.2\times{}10^1 = 2.00\times{}10^{-1},$

dok je točna vrijednost

$\displaystyle x - y = 0.17.$

Greška u ulpima je prema tome

$\displaystyle \left\vert\frac{0.17}{10^{-1}} - 2.00\right\vert\,10^2 = 0.3\times{}10^2 =
30$ ulpa.

Budući da je

$\displaystyle 1 < \log 30 < 2,$

nepouzdane su dvije znamenke.

U ovom primjeru je $ x'=x,$ a greška zaokruživanja broja $ y'$ je

$\displaystyle \left\vert\frac{9.93}{10^0} - 9.90\right\vert\,10^2 = 3$ ulpa.

Dakle u

$\displaystyle y' = 9.90\times{}10^0$

je jedna znamenka nepouzdana. Ipak prilikom odbijanja se broj nepouzdanih znamenki povećao. Dapače, kad se odbijaju bliski brojevi može se dogoditi da niti jedna znamenka u rezultatu nije pouzdana.

Taj problem se može ublažiti tako da se račun izvede s dodatnom znamenkom (guard digit).

Primjer 3.26   Riješimo primjer 3.25 pomoću dodatne znamenke.

Rješenje. Tada je

$\displaystyle x' = 1.010\times{}10^1$   i$\displaystyle \quad y' = 0.993\times{}10^1,$

$\displaystyle x' - y' = 0.017\times{}10^1,$

pa je

$\displaystyle (x' - y')' = 0.017\times{}10^1 = 1.70\times{}10^{-1},$

što je točna vrijednost.

Primjer 3.27   Neka je format $ (10,3),$ $ b=3.34,$ $ a=1.22,$ i $ c=2.28.$ Treba izračunati $ b^2-4ac.$

Rješenje.

$\displaystyle b^2 = 11.1556,\quad 4\,a\,c = 11.1264,\quad b^2 - 4\,a\,c = 0.0292,$

$\displaystyle {b^2}' = 1.12\times{}10^1,\quad (4\,a\,c)' = 1.11\times{}10^1,\quad
(b^2)' - (4\,a\,c)' = 0.1 = 1.00\times{}10^{-1}.$

Dakle greška je

$\displaystyle \left\vert 1.00 - \frac{0.0292}{10^{-1}}\right\vert\,10^2 = 70.8\,$ulpa$\displaystyle .$

Prema tome dvije znamenke su nepouzdane.

Ako se radi s dodatnom znamenkom, greška postaje samo $ 8$ ulpa.

Osim računanjem s dodatnom znamenkom, greška se može umanjiti rearanžiranjem formule.

Primjer 3.28   Ako je $ b^2\gg 4ac,$ i $ b>0,$ onda je % latex2html id marker 42024
$ \sqrt{b^2-4ac}\approx
b,$ pa formula

$\displaystyle \frac{-b + \sqrt{b^2-4\,a\,c}}{2\,a}$

sadrži odbijanje bliskih brojeva, što može dovesti do velike pogreške. U ovom slučaju možemo racionalizirati brojnik

$\displaystyle \frac{-b + \sqrt{b^2-4\,a\,c}}{2\,a} = \frac{-b +
\sqrt{b^2-4\,a...
...b^2-4\,a\,c}}{-b -
\sqrt{b^2-4\,a\,c}} = \frac{2\,c}{-b - \sqrt{b^2-4\,a\,c}}.$

Primjer 3.29   Heronova formula za računanje površine trokuta glasi

$\displaystyle P = \sqrt{s(s-a)(s-b)(s-c)},$

gdje je

$\displaystyle s = \frac{a+b+c}{2}.$

Neka je dan trokut takav da je % latex2html id marker 42035
$ a\approx
b+c.$ Tada ova formula daje loš rezultat za površinu. Znatno bolja je formula

$\displaystyle P_1 = \frac{\sqrt{(a+(b+c))(c-(a-b))(c+(a-b))(a+(b-c))}}{4}.$

Primjer 3.30   Format je $ (10,3).$ Treba izračunati $ x^2-y^2,$ ako je $ x=3.34,$ $ y=3.33.$

Rješenje. Točan rezultat je

$\displaystyle x^2 = 11.1556,\quad y^2 = 11.0889,\quad x^2-y^2 = 0.0667\ .$

Računanje po formuli $ x^2-y^2$ daje

$\displaystyle (x^2)' = 1.12\times 10^1,\quad (y^2)' = 1.11\times 10^1,\quad (x^2)'-(y^2)' = 0.01\times 10^1 = 0.1,$

$\displaystyle ((x^2)'-(y^2)')' = 1.00\times 10^{-1}.$

Ovaj račun daje grešku od

$\displaystyle \vert 1 - 0.667\vert\times 10^2 = 33$ ulpa$\displaystyle .$

No, ako računamo po formuli $ (x-y)(x+y),$ onda imamo

$\displaystyle x-y = 0.01 \Rightarrow (x-y)' = 1.00\times 10^{-2},$

$\displaystyle x+y = 6.67 \Rightarrow (x+y)' = 6.67\times 10^{0}.$

Tako je

$\displaystyle (x-y)'\,(x+y)' = 6.67\times 10^{-2},$

što je točan rezultat.

Primjer 3.31   Format je $ (10,3).$ Treba izračunati $ x+y_1+y_2+\cdots+y_{10},$ gdje je $ x=1.00,$ $ y_1=y_2=\cdots=y_{10}=0.00493.$

Rješenje. Točan rezultat je

$\displaystyle x+y_1+y_2+\cdots+y_{10} = 1.0493\ .$

Ako računamo po formuli

$\displaystyle ((\cdots(x + y_1) + y_2) + \cdots ) + y_{10}),$

onda imamo

$\displaystyle x' = 1.00\times 10^0,\qquad y_1' = 0.00\times 10^0,$

jer se prilikom zbrajanja ili odbijanja brojevi poravnavaju po eksponentu najvećega, i zatim zaokružuju. Tako imamo

$\displaystyle x' + y_1' = 1.00\times 10^0 \Rightarrow (x' + y_1')' = 1.00\times 10^0.$

Nakon toga, na isti način

$\displaystyle ((x' + y_1')' + y_2')' = 1.00\times 10^0,$

itd. Na kraju imamo

$\displaystyle ((\cdots(x' + y_1')' + y_2')' + \cdots )' + y_{10}')' = 1.00\times 10^0.$

Ako računamo tako da najprije zbrojimo male brojeve, pa zatim dodamo $ x,$ onda imamo

$\displaystyle y_1 = \cdots = y_{10} = 4.93\times 10^{-3},$

pa je

$\displaystyle y_1' = \cdots = y_{10}' = 4.93\times 10^{-3}.$

Odatle

$\displaystyle ((\cdots(y_1' + y_2')' + y_3')' + \cdots )' + y_{10}')' = 49.3\times
10^{-3} = 4.93\times 10^{-2} = 0.0493\times 10^0.$

Da se ovaj broj pribroji broju $ x=1.00\times 10^0,$ mora ga se svesti na potenciju s eksponentom $ 0,$ zaokružiti ga i zatim dodati $ x.$ To znači

$\displaystyle ((\cdots(y_1' + y_2')' + y_3')' + \cdots )' + y_{10}')' + x' =
0.05\times 10^0 + 1.00\times 10^0 = 1.05\times 10^0,$

pa je i

$\displaystyle ((\cdots(y_1' + y_2')' + y_3')' + \cdots )' + y_{10}')' + x' =
1.05\times 10^0.$


next up previous contents index
Next: Točno zaokružene operacije Up: Još o greškama Previous: Realni brojevi   Sadržaj   Indeks
2001-10-26