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/.