Arytmetyka zmiennoprzecinkowa wer. 1.2

Transkrypt

Arytmetyka zmiennoprzecinkowa wer. 1.2
Arytmetyka zmiennoprzecinkowa
wer. 1.2
Wojciech Myszka
18 pa¹dziernika 2012
Uªamki
Powinni±my wiedzie¢ juz wszystko na temat arytmetyki liczb
caªkowitych. Teraz zajmienmy si¦ liczbami
zmiennoprzecinkowymi.
Przez analogie do
345,5 = 3 ∗ 102 + 4 ∗ 101 + 5 ∗ 100 + 5 ∗ 10−1
mamy:
101011001,1(2) = 28 + 26 + 24 + 23 + 20 + 2−1
ale nie jest to zapis zbyt wygodny. . . Trzy cyfry po przecinku
0, 001(2) = 0, 125(10)
Duze liczby dziesi¦tne. . .
. . . zapisujemy korzystaj¡c z notacji wykªadniczej (naukowej).
Zamiast pisa¢
c = 299792458 m/s
piszemy
c = 2,99792458 ∗ 108 m/s
albo
c = 2,99792458 E 8 m/s
albo (w przyblizeniu)
c = 3 E 8 m/s
2,99792458 to mantysa; 8 to wykªadnik (albo cecha).
Duze liczby binarne. . .
. . . mozna zapisywa¢ tak samo:
1,11 ∗ 27
Jest nawet specjalna norma na ten temat: IEEE-754.
Dokªadno±¢
Liczby 32-bitowe
I
Dokªadno±¢ dwójkowa : 24 bity
I
Dokªadno±¢ dziesi¦tna : 7,2 cyfry dziesi¦tne
Liczby 64-bitowe
I
Dokªadno±¢ dwójkowa : 53 bity
I
Dokªadno±¢ dziesi¦tna : 15,9 cyfry dziesi¦tne
Zakres
1. 32-bit: 1.17549 E − 038 do 3.40282 E + 038
2. 64-bit: 2.22507 E − 308 do 1.79769 E + 308
Operacje na liczbach zmiennoprzecinkowych I
1. Mnozenie.
Jest proste: mnozymy mantysy i dodajemy wykªadniki.
1,33 e+3 ∗ 1,55 e+7 = 2,0615 e+10
Nast¦pnie trzeba wynik obci¡¢ do odpowiedniej liczby
miejsc znacz¡cych (w naszym przypadku niech to b¦d¡ trzy
cyfry) 2,06 e+10
W przyku liczb binarnych b¦dzie podobnie.
Uwaga: czasami moze zdarzy¢ si¦ problem: w wyniku
mnozenia liczba moze ulec denormalizacji
wówczas
trzeba j¡ znormalizowa¢, zaokr¡gli¢ i skorygowa¢
wykªadnik: 5,55 e+0 ∗ 6,33e+0 = 35,13 e+0 = 3,51 e+1
Operacje na liczbach zmiennoprzecinkowych II
2. Dzielenie.
Post¦pujemy analogicznie jak w przypadku mnozenie
(dzielimy mantysy, odejmujemy wykªadniki). W przypadku
de-normalizacji post¦pujemy jak wyzej
1,33 e+0/9,88 e+0 = 0,134615385 e+0 = 1,35 e−1
3. Dodawanie.
Sprawa nieco bardziej skomplikowana. Aby dodawa¢ liczby
zmiennoprzecinkowe trzeba je najpierw
zdenormalizowa¢ i doprowadzi¢ do równo±ci
wykªadników:
1,22 e+0 + 3,35 e − 4 = 1,22 e+0 + 0,000335 e+0 =
1,220335 e+0 = 1,22 e+0
a nast¦pnie zaokr¡gli¢ i znormalizowa¢. . .
Operacje na liczbach zmiennoprzecinkowych III
4. Odejmowanie.
Identycznie jak dodawanie.
Par¦ problemów
1. Zawsze(?) ograniczona liczba bitów przeznaczona na
zapami¦tanie liczby (ale znane s¡ specjalne programy,
które staraj¡ si¦ te ograniczenie przezwyci¦za¢).
2. Wynik dziaªa« arytmetycznych cz¦sto prowadzi do
powstania nadmiaru (czyli przekroczenia maksymalnej
dopuszczalnej warto±ci liczb).
3. Wi¦kszo±¢ liczb które (z przyzwyczajenia) traktujemy jako
dokªadne, nie ma dokªadnej reprezentacji dwójkowej (0,5
jest OK ale 0,1 juz nie).
Podstawowe de nicje
Wielko±¢ dowolna staªa matematyczna, wynik jakiej±
operacji matematycznej (dziaªania), pierwiastek
rozwi¡zywanego równania. π jest okre±lony
jako stosunek
√
obwodu okr¦giu do jego ±rednicy; 2 jest pierwiastkiem
równania kwadratowego X 2 − 2 = 0.
Warto±¢ dokªadna wielko±ci warto±¢ wynikaj¡ca wprost z
de nicji wielko±ci, nie obarczona zadnymi bª¦dami.
Warto±¢ przyblizona wielko±ci warto±¢ liczbowa uzyskana w
wyniku oblicze«. Zazwyczaj w wyniku oblicze« nie uzyskujemy
dokªadnej warto±ci.
Wielko±ci zyczne
Ci±nienie, temperatura, dªugo±¢, st¦zenie to przykªady
wielko±ci zycznych, które bardzo cz¦sto mierzymy .
Kazdy pomiar obarczony jest bª¦dem wynikaj¡cym
z dokªadno±ci uzytego narz¦dzia pomiarowego.
Warto±¢ dokªadna to temperatura w jakim± miejscu sali;
warto±¢ przyblizona to warto±¢ zmierzona jakim±
termometrem.
Obliczenia
I
Uzywamy komputera do dokonania jakich± oblicze«.
Obliczenia
I
Uzywamy komputera do dokonania jakich± oblicze«.
I
Komputer podaje wynik (a = 5,34273343) maj¡cy 8 cyfr po
przecinku.
Obliczenia
I
Uzywamy komputera do dokonania jakich± oblicze«.
I
Komputer podaje wynik (a = 5,34273343) maj¡cy 8 cyfr po
przecinku.
I
Czy mozemy powiedzie¢, ze wyznaczona liczba ma
wszystkie cyfry poprawne?, Czy rózni si¦ od warto±ci
dokªadnej o mniej niz 0,5 · 10−8 ?
Obliczenia
I
Uzywamy komputera do dokonania jakich± oblicze«.
I
Komputer podaje wynik (a = 5,34273343) maj¡cy 8 cyfr po
przecinku.
I
Czy mozemy powiedzie¢, ze wyznaczona liczba ma
wszystkie cyfry poprawne?, Czy rózni si¦ od warto±ci
dokªadnej o mniej niz 0,5 · 10−8 ?
I
A co z sytuacj¡, ze zastosowana metoda oblicze« jest maªo
dokªadna?
Bª¡d bezwzgl¦dny warto±ci przyblizonej I
Niech A b¦dzie warto±ci¡ dokªadn¡, a a warto±ci¡ przyblizon¡
pewnej wielko±ci. Bª¦dem bezwzgl¦dnym warto±ci
przyblizonej nazywamy kazd¡ liczb¦ ∆a speªniaj¡c¡ warunek:
|A − a| ≤ ∆a,
to znaczy tak¡ liczb¦, ze
a − ∆a ≤ A ≤ a + ∆a.
Warto±¢ przyblizona a i jej bª¡d bezwzgl¦dny ∆a wyznaczaj¡
przedziaª:
< a − ∆a; a + ∆a >,
do którego nalezy dokªadna warto±¢ A
Bª¡d bezwzgl¦dny nie jest okre±lony jednoznacznie!
Liczba przyblizona
Jezeli a jest warto±ci¡ przyblizon¡ dla warto±ci dokªadnej A,
obci¡zon¡ bª¦dem ∆a, to par¦ liczb ∆a, a zapisan¡ w postaci
∆a
a
b¦dziemy nazywali liczb¡ przyblizon¡ dla A.
π
Wiemy, ze π = 3,14159265 . . .. Warto±ci¡ przyblizon¡ π cz¦sto
uzywan¡ w rachunkach, jest liczba 3,14.
Jej bª¦dem bezwzgl¦dnym jest na przykªad liczba ∆a = 0,0016.
Dokªadna warto±¢ π jest zawarta mi¦dzy liczbami:
3,14 − 0,0016 ≤ π ≤ 3, 14 + 0,0016
to znaczy π znajduje si¦ w przedziale
< 3,1384; 3,1416 >
0,0016
Zatem mozemy zapisa¢ π = 3,14
Równo±¢ w przyblizeniu
α
β
Jezeli liczby przyblizone a i b s¡ takie, ze przedziaª
< a − α; a + α > jest zawarty w przedziale < b − β; b + β > to
β
α
mówimy, ze liczba a jest w przyblizeniu równa liczbie b.
α
β
Zapisujemy to a⇒b.
α
β
β
Z tego ze a jest w przyblizeniu równe b NIE WYNIKA, ze b jest
α
w przyblizeniu równe a!
Zaokr¡glanie liczb przyblizonych
α
Dla dowolnej liczby przyblizonej a i dowolnej liczby
rzeczywistej b zachodzi zwi¡zek:
α
α+|a−b|
a⇒
b
α+|a−b|
α
czyli a jest w przyblizeniu równe b
Zaokr¡glanie stosujemy wtedy, gdy wynik jakich± dziaªa« ma
α
0,0000027
zbyt wiele cyfr. Zast¦puj¡c liczb¦ a=3,14159 liczb¡ 3,14
mozemy oszacowa¢ bª¡d. Wynosi on
0,0000027 + |3,14159 − 3,14. Czyli: 0,0015927. Zatem:
0,0000027
0,0015927
3,14159⇒ 3,14
Zaokr¡glanie liczb przyblizonych
Jezeli β ≥ α, to:
α
β
a⇒b
Zatem
0,0015927
0,0016
3,14 ⇒ 3,14
Reguªy zaokr¡glania
I
I
I
Gdy wynik dziaªania arytmetycznego ma (za) duzo cyfr
mozemy odrzuci¢ ostatnie, zb¦dne cyfry (pami¦taj¡c o
zwi¦kszeniu bª¦du zaokr¡glenia).
Gdy pierwsz¡ odrzucon¡ cyfr¡ jest 0, 1, 2, 3, 4 cyfr
pozostawionych w warto±ci przyblizonej nie zmieniamy.
Jezeli pierwsz¡ odrzucon¡ cyfr¡ jest 5, 6, 7, 8, 9 do
pozostawionej cz¦±ci warto±ci przyblizonej dodajemy 1 na
ostatnim zostawianym miejscu dziesi¦tnym.
Taka zmiana liczby przyblizonej nazywa si¦ poprawnym
zaokr¡gleniem.
Reguªy zaokr¡glania
I
I
I
Gdy wynik dziaªania arytmetycznego ma (za) duzo cyfr
mozemy odrzuci¢ ostatnie, zb¦dne cyfry (pami¦taj¡c o
zwi¦kszeniu bª¦du zaokr¡glenia).
Gdy pierwsz¡ odrzucon¡ cyfr¡ jest 0, 1, 2, 3, 4 cyfr
pozostawionych w warto±ci przyblizonej nie zmieniamy.
Jezeli pierwsz¡ odrzucon¡ cyfr¡ jest 5, 6, 7, 8, 9 do
pozostawionej cz¦±ci warto±ci przyblizonej dodajemy 1 na
ostatnim zostawianym miejscu dziesi¦tnym.
Taka zmiana liczby przyblizonej nazywa si¦ poprawnym
zaokr¡gleniem.
Zadanie domowe: poczyta¢ o innych sposobach zaokr¡glania
(zaokr¡glanie w dóª , zaokr¡glanie do góry , zokr¡glanie
bankierskie . . . Która z tych regóª to zaokr¡glanie poprawne?
Dziaªania na liczbach przyblizonych
suma
α
β
α+β
a + b=a + b
Dziaªania na liczbach przyblizonych
suma
α
β
α+β
α
β
α+β
a + b=a + b
róznica
a − b=a − b
Dziaªania na liczbach przyblizonych
iloczyn
α
β
|a|β+|b|α+αβ
a · b⇒
ab
Dziaªania na liczbach przyblizonych
iloczyn
α
|a|β+|b|α+αβ
β
a · b⇒
ab
dzielenie
γ
a
a:b⇒
b
α β
gdzie
γ=
α + | ba |β
.
|b| − β
Dziaªania na liczbach przyblizonych
Zadanie domowe
Jak b¦dzie w przypadku innych operacji:
I
podnoszenie do pot¦gi?
I
pierwiastkowanie (dowolnego stopnia)
I
jakie± inne operacje. . . ?
Dziaªania na liczbach przyblizonych
suma
1. Pierwszy najmniej korzystny przypadek:
a − α + b − β = (a + b) − (α + β)
2. Drugi najmniej korzystny przypadek:
a + α + b + β = (a + b) + (α + β)
Dziaªania na liczbach przyblizonych
suma
1. Pierwszy najmniej korzystny przypadek:
a − α + b − β = (a + b) − (α + β)
2. Drugi najmniej korzystny przypadek:
a + α + b + β = (a + b) + (α + β)
(Zadanie domowe: jak b¦dzie w przypadku róznicy? A w
przypadku iloczynu?)
Przykªad
Obliczy¢ warto±¢ wielomianu
w(x) = a0 x4 + a1 x3 + a2 x2 + a3 x + a4
dla x = 2,1.
Przyjmijmy, ze wspóªczynniki wielomianu s¡ liczbami
dokªadnymi i równaj¡ si¦:
a0 = 2,3, a1 = 3, a2 = −4,5, a3 = 7,2, a4 = −0, 1
Najpierw obliczenia wykonamy z dokªadno±ci¡ do dwóch miejsc
po przecinku, a pó¹niej z dokªadno±ci¡ do czterech.
Przykªad cd
dwie cyfry
0,0
0,0
0,00
x2 =2,1 × 2,1=4,41
0,00
0,0
0,000
0,001
x3 =4, 41 × 2, 1=9,261⇒9,26
0,001
0,0
0,0021
0,0061
0,01403
0,01903
x4 =9,26 × 2,1⇒19,446 ⇒19,45
0,0
0,0061
0,02
2,3 × x4 =2,3 × 19,45 ⇒44,735 ⇒44,74 ⇒44,74
0,001
0
0,003
3x3 =3 × 9,26 ⇒27,78
0,0
0,00
0,000
0,005
−4,5x2 =−4,5 × 4,41⇒−19,845⇒−19,85
0,0
0,0
0,00
7,2x =7,2 × 2,1⇒15,12
suma:
0,02
0,003
0,005
0,00
0,0
0,028
w(2,1) =44,74 + 27,78 −19,85 + 15,12−0,1=67,69
Przykªad cd
cztery cyfry
0,0
0,0
0,00
0,0
0,00
x2 =2,1 × 2,1=4,41
0,000
x3 =4, 41 × 2, 1=9,261
0,000
0,0
0,0000
x4 =9,261 × 2,1=19,4481
0,0
0,0000
0,0000
0,00003
2,3 × x4 =2,3 × 19,4481=44,73063⇒44,7306
0,000
0
0,000
3x3 =3 × 9,261=27,783
0,0
0,00
0,000
−4,5x2 =−4,5 × 4,41=−19,845
0,0
0,0
0,00
7,2x =7,2 × 2,1=15,12
suma
0,00003
0,000
0,000
0,00
0,0
0,00003
w(2,1) =44,7306 + 27,783 − 19,845 + 15,12 − 0,1=67,6886
Przykªad cd
Zaªózmy teraz, ze wspóªczynniki obarczone s¡ bª¦dami i równaj¡ si¦:
0,01
0
0,02
0,02
0,01
a0 =2,3, a1 =3, a2 =−4,5, a3 =7,2, a4 =−0, 1
dwie cyfry
0,42
w(2,1) ⇒67,69
cztery cyfry
0,3678
0,3692
0,37
w(2,1) ⇒67,6886⇒67,69⇒67,69
Prowadzenie oblicze« z dokªadno±ci¡ do czterech cyfr po przecinku praktycznie nie
zwi¦kszyªo dokªadno±ci!
Wynika to st¡d, ze dane obarczone s¡ duzym bª¦dem (juz druga
cyfra po przecinku nie jest dokªadna).
Przykªad
Niech µ = 3,8
x0 ∈ [0; 1]
(1)
xk+1 = µxk (1 − xk )
(2)
Wyniki
k
----10
20
30
40
50
60
70
80
90
100
x(k)
--------0.18509
0.23963
0.90200
0.82492
0.53713
0.66878
0.53202
0.93275
0.79885
0.23161
Program komputerowy
program caos ;
uses
crt ;
va r
s : single ;
d : double ;
e : extended ;
i : integer ;
begin
s := 0.5;
d := 0.5;
e := 0.5;
f o r i : = 1 to
s : = 3.8 ∗
d : = 3.8 ∗
e : = 3.8 ∗
i f ( i /10 =
writeln
end ;
end ;
readln ;
end .
{ 32−b i t r e a l }
{ 64−b i t r e a l }
{ 80−b i t r e a l }
100 do begin
s ∗ (1 − s ) ;
d ∗ (1 − d ) ;
e ∗ (1 − e ) ;
i n t ( i / 1 0 ) ) then begin
( i :10 , s :16:5 , d :16:5 , e : 1 6 : 5 ) ;
Literatura dodatkowa I
David Goldberg.
What every computer scientist should know about
Floating-Point arithmetic.
Numerical Computation Guide. Sun Microsystems, Palo Alto,
2000.
http://docs.oracle.com/cd/E19957-01/806-3568/ncg_
goldberg.html.
Wojciech Myszka.
Przykªadowe programiki pokazuj¡ce problemy numeryczne.
Dost¦pne pod adresem
http://www.immt.pwr.wroc.pl/~myszka/TI/kod.html,
pa¹dziernik 2008.
Literatura dodatkowa II
Alan Ward.
Some issues on oating-point precision under linux.
Linux Gazette, (53), May 2000.
http://linuxgazette.net/issue53/ward.html.
Roman Zuber.
Metody numeryczne i programowanie.
WSziP, 1975.
fragmenty:
http://www.immt.pwr.wroc.pl/~myszka/TI/zuber.pdf
oraz
http://www.immt.pwr.wroc.pl/~myszka/TI/zuber1.pdf.
Kolofon
Prezentacja zªozona w systemie LATEX 2ε z wykorzystaniem klasy
beamer. Uzyto fontu MS Trebuchet. Ilustracja na stronie
tytuªowej jest fragmentem zdjecia, przedstawiaj¡cego 8-bitowy
mikrokontroler Intel 8742, zawieraj¡cy w jednym ukªadzie CPU
o szybko±ci 12 MHz, 128 bajtów RAM, 2048 bajtów EPROM oraz
ukªady wej±cia/wyj±cia.
Sameli, Ioan. 2006. Old processor. Maj 25. Flickr.
http://www.flickr.com/photos/biwook/153062645/.