Arytmetyka zmiennoprzecinkowa - wer. 3 z drobnymi modyfikacjami!

Transkrypt

Arytmetyka zmiennoprzecinkowa - wer. 3 z drobnymi modyfikacjami!
Arytmetyka zmiennoprzecinkowa
wer. 3 z drobnymi mody kacjami!
Wojciech Myszka
2016-11-06 10:58:20 +0100
Uªamki
Powinni±my wiedzie¢ ju» wszystko na temat arytmetyki
liczb caªkowitych. Teraz zajmiemy 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)
Du»e 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 przybli»eniu)
c ∼ 3 E 8 m/s
2,99792458 to mantysa; 8 to wykªadnik (albo cecha).
Du»e liczby binarne. . .
. . . mo»na 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
I Dokªadno±¢ dziesi¦tna
Liczby 64-bitowe
I Dokªadno±¢ dwójkowa
I Dokªadno±¢ dziesi¦tna
: 24 bity
: ∼7,2 cyfry dziesi¦tne
: 53 bity
: ∼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. Mno»enie.
Jest proste: mno»ymy 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 przypadku liczb binarnych b¦dzie podobnie.
Uwaga: czasami mo»e zdarzy¢ si¦ problem: w wyniku
mno»enia liczba mo»e 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 mno»enie
(dzielimy mantysy, odejmujemy wykªadniki). W
przypadku de-normalizacji post¦pujemy jak wy»ej
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
Operacje na liczbach
zmiennoprzecinkowych III
a nast¦pnie zaokr¡gli¢ i znormalizowa¢. . .
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¦»a¢).
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 ju» nie).
Podstawowe de nicje
De nicja (Wielko±¢)
Dowolna staªa matematyczna, wynik jakiej± operacji
matematycznej (dziaªania), pierwiastek rozwi¡zywanego
równania. π jest
√ okre±lony jako stosunek obwodu okr¦gu do
jego ±rednicy; 2 jest pierwiastkiem równania
kwadratowego X 2 − 2 = 0.
De nicja (Warto±¢ dokªadna wielko±ci)
Warto±¢ wynikaj¡ca wprost z de nicji wielko±ci, nie
obarczona »adnymi bª¦dami.
De nicja (Warto±¢ przybli»ona 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¦»enie to przykªady
wielko±ci zycznych, które bardzo cz¦sto mierzymy .
Ka»dy pomiar obarczony jest bª¦dem wynikaj¡cym
z dokªadno±ci u»ytego narz¦dzia pomiarowego.
Warto±¢ dokªadna to temperatura w jakim± miejscu sali;
warto±¢ przybli»ona to warto±¢ zmierzona jakim±
termometrem.
Obliczenia
I
U»ywamy komputera do dokonania jakich± oblicze«.
Obliczenia
I
I
U»ywamy komputera do dokonania jakich± oblicze«.
Komputer podaje wynik (a = 5,34273343) maj¡cy 8
cyfr po przecinku.
Obliczenia
I
I
I
U»ywamy komputera do dokonania jakich± oblicze«.
Komputer podaje wynik (a = 5,34273343) maj¡cy 8
cyfr po przecinku.
Czy mo»emy powiedzie¢, »e wyznaczona liczba ma
wszystkie cyfry poprawne?, Czy ró»ni si¦ od warto±ci
dokªadnej o mniej ni» 0,5 · 10−8 ?
Obliczenia
I
I
I
I
U»ywamy komputera do dokonania jakich± oblicze«.
Komputer podaje wynik (a = 5,34273343) maj¡cy 8
cyfr po przecinku.
Czy mo»emy powiedzie¢, »e wyznaczona liczba ma
wszystkie cyfry poprawne?, Czy ró»ni si¦ od warto±ci
dokªadnej o mniej ni» 0,5 · 10−8 ?
A co z sytuacj¡, »e zastosowana metoda oblicze« jest
maªo dokªadna?
Bª¡d bezwzgl¦dny warto±ci przybli»onej I
Bª¡d bezwzgl¦dny warto±ci przybli»onej II
De nicja (Bª¡d bezwzgl¦dny warto±ci
przybli»onej)
Niech A b¦dzie warto±ci¡ dokªadn¡, a a warto±ci¡
przybli»on¡ pewnej wielko±ci. Bª¦dem bezwzgl¦dnym
warto±ci przybli»onej nazywamy ka»d¡ liczb¦ ∆a
speªniaj¡c¡ warunek:
|A − a| ≤ ∆a,
to znaczy tak¡ liczb¦, »e
a − ∆a ≤ A ≤ a + ∆a.
Bª¡d bezwzgl¦dny warto±ci przybli»onej
III
Warto±¢ przybli»ona a i jej bª¡d bezwzgl¦dny ∆a
wyznaczaj¡ przedziaª:
< a − ∆a; a + ∆a >,
do którego nale»y dokªadna warto±¢ A
Bª¡d bezwzgl¦dny nie jest okre±lony jednoznacznie!
Liczba przybli»ona
De nicja (Liczba przybli»ona)
Je»eli a jest warto±ci¡ przybli»on¡ dla warto±ci dokªadnej
A, obci¡»on¡ bª¦dem ∆a, to par¦ liczb ∆a, a zapisan¡ w
postaci
∆a
a
b¦dziemy nazywali liczb¡ przybli»on¡ dla A.
Liczba π
Wiemy, »e π = 3,14159265 . . .. Warto±ci¡ przybli»on¡ π
cz¦sto u»ywan¡ 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 mo»emy zapisa¢ π = 3,14
Równo±¢ w przybli»eniu
α
β
Je»eli liczby przybli»one a i b s¡ takie, »e przedziaª
< a − α; a + α > jest zawarty w przedziale
α
< b − β; b + β > to mówimy, »e liczba a jest w
β
α
β
przybli»eniu równa liczbie b. Zapisujemy to a⇒b.
α
β
β
Z tego »e a jest w przybli»eniu równe b NIE WYNIKA, »e b
α
jest w przybli»eniu równe a!
Zaokr¡glanie liczb przybli»onych
α
Dla dowolnej liczby przybli»onej a i dowolnej liczby
rzeczywistej b zachodzi zwi¡zek:
α
α+|a−b|
a⇒
b
α+|a−b|
α
czyli a jest w przybli»eniu równe b
Zaokr¡glanie stosujemy wtedy, gdy wynik jakich± dziaªa«
α
0,0000027
ma zbyt wiele cyfr. Zast¦puj¡c liczb¦ a=3,14159 liczb¡
3,14 mo»emy 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 przybli»onych
Je»eli β ≥ α, to:
α
β
a⇒b
0,0015927
0,0016
Zatem 3,14 ⇒ 3,14
Reguªy zaokr¡glania I
I
I
I
Gdy wynik dziaªania arytmetycznego ma (za) du»o
cyfr mo»emy 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 przybli»onej nie
zmieniamy.
Je»eli pierwsz¡ odrzucon¡ cyfr¡ jest 5, 6, 7, 8, 9 do
pozostawionej cz¦±ci warto±ci przybli»onej dodajemy
1 na ostatnim zostawianym miejscu dziesi¦tnym.
Reguªy zaokr¡glania II
Taka zmiana liczby przybli»onej nazywa si¦ poprawnym
zaokr¡gleniem.
Zadanie domowe: poczyta¢ o innych sposobach
zaokr¡glania (zaokr¡glanie w dóª , zaokr¡glanie do
góry , zaokr¡glanie bankierskie . . . Która z tych reguª to
zaokr¡glanie poprawne?
Dziaªania na liczbach przybli»onych
suma
α
β
α+β
a + b=a + b
Dziaªania na liczbach przybli»onych
suma
α
β
α+β
α
β
α+β
a + b=a + b
ró»nica
a − b=a − b
Dziaªania na liczbach przybli»onych
iloczyn
α
β
|a|β+|b|α+αβ
a · b⇒
ab
Dziaªania na liczbach przybli»onych
iloczyn
α
|a|β+|b|α+αβ
β
a · b⇒
ab
dzielenie
γ
a
a:b⇒
b
α β
gdzie
γ=
α + | ba |β
.
|b| − β
Dziaªania na liczbach przybli»onych
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 przybli»onych
suma
1. Pierwszy najmniej korzystny przypadek:
a − α + b − β = (a + b) − (α + β)
2. Drugi najmniej korzystny przypadek:
a + α + b + β = (a + b) + (α + β)
Dziaªania na liczbach przybli»onych
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ó»nicy? 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, »e 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 I
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
0,001
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
Przykªad cd II
dwie cyfry
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 I
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
Przykªad cd II
cztery cyfry
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 I
Zaªó»my teraz, »e 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
Przykªad cd II
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, »e dane obarczone s¡ du»ym bª¦dem (ju»
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 ;
var
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.
Literatura dodatkowa II
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.
Alan Ward.
Some issues on oating-point precision under linux.
Linux Gazette, (53), May 2000.
http://www.tldp.org/LDP/LGNET/issue53/ward.html.
Literatura dodatkowa III
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ªo»ona w systemie LATEX 2ε z wykorzystaniem
klasy beamer. U»yto fontu MS Trebuchet. Ilustracja na
stronie tytuªowej jest fragmentem zdj¦cia,
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/.