Transcript Paklaidos

PAKLAIDOS
Skaičių vaizdavimas kompiuteriuose
Kadangi tiek skaičiavimo kompiuteriais specifika, tiek skaičiavimo
paklaidos priklauso nuo skaičių vaizdavimo juose, tai pirmiausia ir
išnagrinėkime, kaip jose vaizduojami realieji skaičiai.
Realusis skaičius x kompiuteriuose
slankiojo kablelio išraiška:
vaizduojamas
x  mp
q
Čia p - skaičiavimo sistemos pagrindas,
m - mantisė, tenkinanti sąlygą
q - skaičiaus eilė (sveikasis skaičius).
1
p
 m 1
Pavyzdys
3.14 = 0.314101 = 31.4 10-1= 0.0314102 ir t.t.
Iš visų šio skaičiaus formų rikalavimus tenkina
vienintelė forma 0.314101 ; t.y.
Skaičiavimo sistemos pagrindas p = 10,
mantisė m = 0.314, o eilė q = 1
 d1 d 2
dt   q
x    2  ...  t   p
Kitaip tariant,
p 
 p p
d1  0 , o l  q  u
čia 0  di  p  1, i  1, t,
t - skaičius skilčių, skirtų mantisei vaizduoti
Tokią skaičiaus x išraišką žymėsime fl(x). Skaičiaus eilė
dažnai nusakoma jai vaizduoti skirtų skilčių skaičiumi.
Tarkime, kad r - skaičius skilčių, skirtų eilei q vaizduoti.
Tada galime laikyti, kad eilės q
viršutinis rėžis
u  pr  1 , o apatinis


l   pr  1
Išnagrinėkime, kiek skirtingų realiųjų skaičių gali įsiminti
skaičiavimo
mašina, kitaip
tariant,skaičių
kokia yraaibės
kompiuterio
Kompiuterio
realiųjų
galiarealiųjų
G.
skaičių aibės galia G.
Daugiklis 2 reiškia,
kad skaičiai gali būti
tiek teigiamieji, tiek
neigiamieji.
G  2   p  1  pt 1  u  l  1  1.
Šioje formulėje reiškinys
Daugiklis rodo,
kiek skirtingų
reikšmių gali įgyti
eilė q.
žymi skaičių mantisių, kurias
galima parašyti p skaičiavimo
sistemoje, kai mantisei
vaizduoti skirta t skilčių ir 1  m  1
mantisė m tenkina sąlygą p
Dėmuo 1
žymi nulį.
Skaičiavimo sistemos
pagrindas
Eilės apatinis
Pavyzdžiui, jeigu p = 2, t = 4, l = –3 ir u = 3,
Mantisei skirtų
skilčių skaičius
tai
ir viršutinis rėžiai
G  2 1 2  3  3  1  1  113.
3
G  2   p  1  pt 1  u  l  1  1.
Nors kompiuteriams G yra labai didelis skaičius, tačiau
jis yra baigtinis. Vadinasi, begalinę kontinuumo galios
realiųjų skaičių aibę kompiuteris atvaizduoja į baigtinę
realiųjų skaičių aibę, kurios galia G.
Kokios yra tokio atvaizdavimo pasekmės?
1. Operacijų neekvivalentumas.
Aritmetiniai veiksmai ir kompiuterio atliekami tie patys
matematiniai veiksmai nėra ekvivalentūs. Pavyzdžiui,
matematinėje formulėje y=a•(b+c) sudėties ir daugybos veiksmai
atliekami absoliučiai tiksliai. Tačiau šioje formulėje, užrašytoje
kokia nors algoritmine kalba, pavyzdžiui, y=a*(b+c) , sudėtis ir
daugyba bus atliekamos apytiksliai ir rezultato tikslumas
priklausys nuo skaičių vaizdavimo kompiuteryje.
2. Aritmetinių dėsnių negaliojimas.
Kompiuterių aritmetikoje ne visada galioja asociatyvumo ir
distributyvumo dėsniai.
Tarkime, kad turime kompiuterį, kuriam p = 10, o t = 4.
Išnagrinėkime tapatybes:
a  (b  c)  (a  b)  c
0,00004976 ·104 b .
0,00002897 ·104 c .
0,00007873 ·104 b+c
0,7520 ·104
a .
0,7521 ·104 a+(b+c)
Sakykime, a=0,7520104,
b=0,4976100, c=0,2897100.
0,7520 ·104
a
0,00004976 ·10
· 1044 b
0,7520 ·104
a+b
0,00002897 ·104 c
0,7520 ·104 (a+b)+c
O tikslus atsakymas 0,75207873 ·104
a  b  c  a  b  c
Sakykime, a=0,9302 · 104,
b=0,6741 · 100, c=0,8544 ·
101.
a ·(b ·c) = 0,5358 ·105
(a ·b) ·c = 0,5357 ·105
Tiksli reikšmė a ·b ·c = 0,535749657 ·105
a  b  c  a  b  a  c
Sakykime, a=0,9964,
b=0,6392, c=0,6375.
a ·(b -c) = 0,1592 ·10-2
a ·b - a·c = 0,1500 ·10-2
Tiksli reikšmė a ·(b - c) = 0,159188 ·10-2
3. Mažiausiojo ir didžiausiojo skaičiaus egzistavimas.
Kai eilei yra skirta r skilčių, tai nelygų nuliui skaičių,
kurio modulis yra mažiausias, galime užrašyti taip:
1
 p  p

  p p
 p r 1
r
Jei skaičiuodami gauname rezultatą, kurio modulis
mažesnis už , tai tas rezultatas traktuojamas kaip nulis ir
vadinamas mašininiu nuliu (underflow).
Didžiausias kompiuterio
įsimenamas skaičius yra :

  1 p
t
 p
p r 1
Kai skaičiavimo rezultatas didesnis už šį skaičių,
kompiuteris sustoja. Toks avarinis sustojimas vadinamas
„persipildymu“ (overflow).
4. Mašininis epsilon.
Labai svarbus kompiuterių aritmetikos parametras yra
skaičius, kuris rodo, kiek mažiausiai du realieji skaičiai
turi skirtis vienas nuo kito, kad kompiuteris juos
suprastų kaip atskirus skaičius. Šis parametras,
sutrumpintai vadinamas macheps, yra standartizuotas ir
apibrėžiamas taip: tai pats mažiausias teigiamasis
skaičius, tenkinantis sąlygą 1+macheps > 1.
Galime teigti, kad kiekvieno realiojo skaičiaus x  0
fl(x) santykinė paklaida yra mažesnė nei macheps ir,
atvirkščiai, bet kurio realiojo skaičiaus
x  0 fl(x)[x (1-macheps), x (1+macheps)]
Paklaidų šaltiniai
Skaičiaus absoliučioji paklaida yra
tikslios ir apytikslės jo reikšmės skirtumas: x  x  x
čia x — absoliučioji paklaida, x — tiksli skaičiaus reikšmė,
x — apytikslė skaičiaus reikšmė.
Skaičiaus santykinė paklaida yra jo absoliučiosios
paklaidos ir apytikslės reikšmės santykis:
x
x
x
Skaičiuojant susiduriama su trejopomis paklaidomis:
a) pradinėmis informacijos paklaidomis,
b)
sprendimo metodo paklaidomis,
c) apvalinimo paklaidomis.
Pradinės informacijos paklaidos
Pradiniai skaičiavimo duomenys paprastai yra įvairių matavimų
rezultatai, turintys paklaidas. Skaičiuojant kompiuteriu, be šių
paklaidų, atsiranda papildomų paklaidų, nes kompiuteriuose
vartojama dvejetainė skaičiavimo sistema ir mantisės skilčių
skaičius yra baigtinis.
Pavyzdžiui, (0,1)10 = (0,000110011001100...)2; čia indeksas
žymi skaičiavimo sistemos pagrindą.
Dvejetainėje skaičiavimo sistemoje skaičius 0,1 užrašomas
begaline trupmena.
Kadangi kompiuteryje skaičiui užrašyti skiriamas baigtinis
skaičius skilčių, tai, 0,1 vaizduojant kompiuteryje, atsiranda
papildoma paklaida
Sprendimo metodo paklaidos
Šios paklaidos priklauso nuo uždavinio sprendimo
metodo.
Pavyzdžiui, apskaičiuojant y = sin x (x  0) reikšmę Teiloro
eilučių metodu, t. y. funkciją y = sin x išreiškus Teiloro eilute
x3 x5 x 7
sin x  x 
 
 ...
3! 5! 7!
ir paėmus pirmuosius tris jos narius,
metodo paklaida bus lygi atmetamų
narių sumai, o jos modulis mažesnis už
x7
7!
Apvalinimo paklaidos
Apvalinimo paklaidos priklauso nuo mantisei
vaizduoti skirtų skilčių skaičiaus ir nuo skaičiavimo
veiksmų.
Tarkime reikia
sumuoti tokius
skaičius:
Pavyzdys
1
Dalinės sumos, kai sumuoti pradedame
0.2897·100
0.4976 ·100
0.2488 ·101
0.7259 ·101
0.1638 ·102
0.6249 ·102
0.2162 ·103
0.5233 ·103
0.1403 ·104
0.5291 ·104
nuo mažesnių skaičių
0.7873 ·100
0.3275 ·101
0.1053 ·102
0.2691 ·102
0.8940 ·102
0.3056 ·103
0.8289 ·103
0.2232 ·104
0.7523 ·104
nuo didesnių skaičių
0.6694 ·104
0.7217 ·104
0.7433 ·104
0.7495 ·104
0.7511 ·104
0.7518 ·104
0.7520 ·104
0.7520 ·104
0.7520 ·104
Jei sumuodami išsaugotume visas reikšmines skiltis,
tai tiksli suma būtų 0.75229043 ·104
Sumuodami nuo mažesnių skaičių gavome sumą,
kurios paklaida yra –0.1 ·100;
tuo tarpu sumuodami nuo didesnių skaičių gavome
sumą, kurios paklaida yra 2.9 ·100 , kuri bevei 30
kartų didesnė.
Sumuojant nuo didesnių
skaičių trys paskutinės
dalinės sumos yra lygios.
Tai atsitinka todėl, kad (žr.
veiksmus)
0,7520 ·104
a
0,00004976 ·10
· 1044 b
0,7520 ·104
a+b
0,00002897 ·104 c
0,7520 ·104 (a+b)+c
Pavyzdys 2
1 1
1
S n  1    ... 
2 3
n
n – labai didelis
Kada gausime tikslesnį rezultatą –
sumuodami nuo pradžios,
ar nuo galo?
Pateikta suma yra harmoninės eilutės dalinė suma.
Kadangi harmoninė eilutė diverguoja, tai prie didelės n
reikšmės Sn bus labai didelis skaičius. Vadinasi, jei
sumuotume nuo pradžios, tai būtų toks skaičius Sk , kad
1
1
nariai
,...,
k 1
n
būtų mažesni už šio skaičiaus
apvalinimo paklaidą.
Jei sumuotume nuo
mažiausiųjų skaičių, tai jų
sukaupta suma turėtų
įtakos bendrai sumai.
Žr. skaidrę 8