Arytmetyka komputerów - Politechnika Wrocławska
Transkrypt
Arytmetyka komputerów - Politechnika Wrocławska
Arytmetyka komputerów Wersja: 5 z drobnymi mody kacjami! Wojciech Myszka 2012-11-09 09:23:41 +0100 Cz¦±¢ I Liczby binarne i arytmetyka komputerów Arytmetyka komputerów I Zapis liczb I I I I I I dwójkowy. Ka»da z liczb zapisywana jest za pomoc¡ cyfr 0 i 1. Ukªad jest pozycyjny waga cyfry zale»y od miejsca, w którym zostaªa ustawiona. Najmniej znacz¡ce miejsca s¡ po stronie prawej. . . 1010 to 1 × 23 + 0 × 22 + 1 × 21 + 0 × 20 czyli 8 + 0 + 2 + 0 = 10 NB liczby parzyste maj¡ zero na ko«cu, nieparzyste 1. Arytmetyka dwójkowa I I I I I I 0+0=0 1+0=0+1=1 1 + 1 = 10 1×1=1 1×0=0×1=0 0×0=0 bardzo prosta. Operacje logiczne (Podstawowe) operacje logiczne to suma logiczna (OR), iloczyn logiczny (AND), negacja (NOT), ró»nica symetryczna (XOR) OR 0 1 0 0 1 1 1 1 AND 0 1 0 0 0 1 0 1 XOR 0 1 0 0 1 1 1 0 Arytmetyka komputera Arytmetyka klasyczna Jeste±my przyzwyczajeni do nast¦puj¡cych rzeczy : 1. Je»eli x 6= 0 to ∀a a + x 6= a Arytmetyka komputera Arytmetyka klasyczna Jeste±my przyzwyczajeni do nast¦puj¡cych rzeczy : 1. Je»eli x 6= 0 to ∀a a + x 6= a 2. a + b + ··· + z = z + y + ··· + b + a Arytmetyka komputera Arytmetyka klasyczna Jeste±my przyzwyczajeni do nast¦puj¡cych rzeczy : 1. Je»eli x 6= 0 to ∀a a + x 6= a 2. a + b + ··· + z = z + y + ··· + b + a 3. ∀a, b ∈ < a < b ∃c : a < c < b Arytmetyka komputera Arytmetyka klasyczna Jeste±my przyzwyczajeni do nast¦puj¡cych rzeczy : 1. Je»eli x 6= 0 to ∀a a + x 6= a 2. a + b + ··· + z = z + y + ··· + b + a 3. ∀a, b ∈ < a < b ∃c : a < c < b W arytmetyce komputerowej powy»sze zasady nie zawsze obowi¡zuj¡! Liczby zmiennoprzecinkowe 1. Arytmetyka 1.1 1.2 1.3 1.4 Liczby Liczby Liczby Liczby naturalne caªkowite wymierne rzeczywiste 2. Komptery 2.1 Liczby caªkowite ( integer ) 2.2 Liczby staªoprzecinkowe 2.3 Liczby zmiennoprzecinkowe Liczby caªkowite I I Sytuacja dosy¢ klarowna. I Na n bitach mo»emy zapisa¢ liczby caªkowite dodatnie z zakresu od zera do 2n − 1 I Jest pewien problem z liczbami ujemnymi: trzeba zarezerwowa¢ miejsce na znak I Trzeba to tak zrobi¢, »eby podstawowe operacje (dodawanie, odejmowanie i mno»enie,. . . ) byªy wykonywane tak samo gdy argumenty s¡ dodatnie jak i wtedy gdy s¡ ujemne. I Ukªad uzupeªnieniowy to zaªatwiª. Liczby caªkowite II I Czasami korzysta si¦ z kodu BCD (Binary Coded Decimal (cyfry) dziesi¦tne kodowane binarnie: liczba zapisywana jest w ukªadzie dziesi¦tnym (za pomoc¡ cyfr dziesi¦tnych), ale poszczególne cyfry kodowane s¡ binarnie 321(10) zapisywane jest jako 0011 0010 00012 Liczby ujemne 1. Trzeba zarezerwowa¢ jeden bit na zapami¦tanie znaku! 2. Wariant najprostszy 3 0000011 3. Wariant najprostszy −3 1000011 Jest to zapis znak moduª 4. Ale jak dodawa¢ takie liczby? Liczby ujemne Tablica odejmowania: − 0 1 0 0 1 1 1 0 (Zakªadamy, »e operujemy na liczbach czterobitowych!) 0011 − 1 = 0010 0010 − 1 = 0001 0001 − 1 = 0000 0000 − 1 = 1111 Zatem −1 to 1111 (czterobitowo!) Liczby ujemne Dokonajmy prostego sprawdzenia: 5 + (−1) 0 1 0 1 1 1 1 1 Liczby ujemne Dokonajmy prostego sprawdzenia: 5 + (−1) 0 1 0 1 1 1 1 1 1 0 1 0 0 Dygresja Liczby dziesi¦tne, dwucyfrowe: 3 3 9 9 Dygresja Liczby dziesi¦tne, dwucyfrowe: 3 3 9 9 1 3 2 Negacja liczby Mnemotechniczny algorytm negacji jest bardzo prosty: negujemy wszystkie bity i powstaª¡ liczb¦ zwi¦kszamy o 1: 1 to 0001 negacje: 1110 zwi¦kszenie o 1: 1111 2 to 0010 negacja: 1101 zwi¦kszenie o 1: 1110 sprawdzenie 5 + (−2) 0 1 0 1 1 1 1 0 1 0 0 1 1 Liczby staªoprzecinkowe 1. Liczby w których na zapami¦tanie cz¦±ci caªkowitej przeznacza si¦ kilka(na±cie/dziesi¡t) bitów 2. Na zapami¦tanie cz¦±ci uªamkowej równie» u»ywa si¦ kilku(nastu?) bitów: 1 0 1 0 , 1 0 1 0 co odczytujemy jako: 1 ∗ 23 + 0 ∗ 22 + 1 ∗ 21 + 0 ∗ 20 + 1 ∗ 2−1 + 0 ∗ 2−2 + 1 ∗ 2−3 + 0 ∗ 2−4 lub 8 + 2 + 21 + 18 czyli 10,625 3. U»ywany bardzo rzadko ( nanse??) 4. Z matematycznego punktu widzenia s¡ to liczby wymierne 5. Jak w tej postaci zapisa¢ liczb¦ 1,1 Liczby zmiennoprzecinkowe I 1. S¡ to liczby zapisywane (kodowane) w sposób podobny do znanego nam: c = 299792458 ∼ 3 ∗ 108 m/s 2. Czyli w postaci mantysa (2,99792458) plus wykªadnik 8, zatem 2,99792458*108 albo inaczej 2,99792458 e8 3. W przypadku komputerów podstawa kodowania (tak mantysy jak i wykªadnika) to 2! 4. Dodatkowo liczby zapisywane s¡ zawsze w postaci znormalizowanej czyli takiej, »e cyfra przed przecinkiem (kropk¡) dziesi¦tnym jest zawsze z zakresu mi¦dzy 1 a 9. (a w ukªadzie dwójkowym zawsze jest równa 1!) 5. Na zapami¦tanie mantysy i wykªadnika przeznaczana jest zawsze sko«czona liczba bitów. Liczby zmiennoprzecinkowe II 6. Z matematycznego punktu widzenia s¡ to liczby wymierne. 7. Sposób zapisu liczb zmiennoprzecinkowych reguluje standard IEEE-754. Zgodnie ze standardem liczba zmiennoprzecinkowa zapisywana jest tak: I Zakres liczb: ±1,18 · 10−38 do okoªo ±3,4 · 1038 . I Dokªadno±¢: 7 8 cyfr dziesi¦tnych. Liczby zmiennoprzecinkowe III I Przypadki szczególne: I I I I I +0 wszystkie bity s¡ zerami −0 bit znaku ustawiony, wszystkie bity s¡ zerami liczby maªe (denormalized numbers) nie zakªada si¦ niezerowego pierwszego bitu mantysy ±∞ ustawione wszystkie bity wykªadnika, mantysa równa zero (jako wynik dzielenia przez zero, na przykªad) NaN (Not a Number) ustawione wszystkie bity wykª¡dnika, mantysa ró»na od zera. 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). 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 denormalizacji 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 a nast¦pnie zaokr¡gli¢ i znormalizowa¢. . . Operacje na liczbach zmiennoprzecinkowych III 4. Odejmowanie. Identycznie jak dodawanie. Konwersje Dziesi¦tny do dwójkowego Liczby caªkowite: Liczb¦ dzielimy przez dwa zapisuj¡c reszty z dzielenia: 10 Konwersje Dziesi¦tny do dwójkowego Liczby caªkowite: Liczb¦ dzielimy przez dwa zapisuj¡c reszty z dzielenia: 10 5 0 Konwersje Dziesi¦tny do dwójkowego Liczby caªkowite: Liczb¦ dzielimy przez dwa zapisuj¡c reszty z dzielenia: 10 5 0 2 1 Konwersje Dziesi¦tny do dwójkowego Liczby caªkowite: Liczb¦ dzielimy przez dwa zapisuj¡c reszty z dzielenia: 10 5 0 2 1 1 0 Konwersje Dziesi¦tny do dwójkowego Liczby caªkowite: Liczb¦ dzielimy przez dwa zapisuj¡c reszty z dzielenia: 10 5 0 2 1 1 0 0 1 Konwersje Dziesi¦tny do dwójkowego Liczby caªkowite: Liczb¦ dzielimy przez dwa zapisuj¡c reszty z dzielenia: 10 5 0 2 1 1 0 0 1 Reszty z dzielenia zapisujemy od ko«ca otrzymuj¡c 1010 Konwersje Dziesi¦tny do dwójkowego Cz¦±¢ uªamkowa: Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡: ,33 Konwersje Dziesi¦tny do dwójkowego Cz¦±¢ uªamkowa: Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡: ,33 0 ,66 Konwersje Dziesi¦tny do dwójkowego Cz¦±¢ uªamkowa: Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡: ,33 0 ,66 1 ,32 Konwersje Dziesi¦tny do dwójkowego Cz¦±¢ uªamkowa: Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡: ,33 0 ,66 1 ,32 0 ,64 Konwersje Dziesi¦tny do dwójkowego Cz¦±¢ uªamkowa: Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡: ,33 0 ,66 1 ,32 0 ,64 1 ,28 Konwersje Dziesi¦tny do dwójkowego Cz¦±¢ uªamkowa: Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡: ,33 0 ,66 1 ,32 0 ,64 1 ,28 0 ,56 Konwersje Dziesi¦tny do dwójkowego Cz¦±¢ uªamkowa: Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡: ,33 0 ,66 1 ,32 0 ,64 1 ,28 0 ,56 1 ,12 Konwersje Dziesi¦tny do dwójkowego Cz¦±¢ uªamkowa: Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡: ,33 0 ,66 1 ,32 0 ,64 1 ,28 0 ,56 1 ,12 0 ,24 Konwersje Dziesi¦tny do dwójkowego Cz¦±¢ uªamkowa: Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡: ,33 0 ,66 1 ,32 0 ,64 1 ,28 0 ,56 1 ,12 0 ,24 0 ,48 Konwersje Dziesi¦tny do dwójkowego Cz¦±¢ uªamkowa: Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡: ,33 0 ,66 1 ,32 0 ,64 1 ,28 0 ,56 1 ,12 0 ,24 0 ,48 0 ,96 Konwersje Dziesi¦tny do dwójkowego Cz¦±¢ uªamkowa: Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡: ,33 0 ,66 1 ,32 0 ,64 1 ,28 0 ,56 1 ,12 0 ,24 0 ,48 0 ,96 1 ,92 Konwersje Dziesi¦tny do dwójkowego Cz¦±¢ uªamkowa: Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡: ,33 0 ,66 1 ,32 0 ,64 1 ,28 0 ,56 1 ,12 0 ,24 0 ,48 0 ,96 1 ,92 1 ,84 Konwersje Dziesi¦tny do dwójkowego Cz¦±¢ uªamkowa: Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡: ,33 0 ,66 1 ,32 0 ,64 1 ,28 0 ,56 1 ,12 0 ,24 0 ,48 0 ,96 1 ,92 1 ,84 1 ,68 Konwersje Dziesi¦tny do dwójkowego Cz¦±¢ uªamkowa: Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡: ,33 0 ,66 1 ,32 0 ,64 1 ,28 0 ,56 1 ,12 0 ,24 0 ,48 0 ,96 1 ,92 1 ,84 1 ,68 0,0101010001112 =0,32983398437510 Konwersje Dwójkowy do dziesi¦tnego Do zrobienia w domu! Wnioski 1. Konwersja liczb dziesi¦tnych do dwójkowych cz¦sto wprowadza bª¦dy. 2. Ograniczona liczba bitów powoduje, »e ka»de dziaªanie wykonywane jest z bª¦dem. 3. W przypadku wielokrotnego powtarzania jakiego± obliczenia sprawa zaczyna mie¢ znaczenie. . . Cz¦±¢ II Bª¦dy numeryczne Bª¦dy Bardzo prosty przykªad. Mamy dwa wyra»enia: Wyra»enie 1 x = ((b + a) − a)/b Bª¦dy Bardzo prosty przykªad. Mamy dwa wyra»enia: Wyra»enie 1 x = ((b + a) − a)/b Wyra»enie 2 y = (b + (a − a))/b Bª¦dy Bardzo prosty przykªad. Mamy dwa wyra»enia: Wyra»enie 1 x = ((b + a) − a)/b Wyra»enie 2 y = (b + (a − a))/b Jaki powinien by¢ wynik dziaªa« dla: 1. a = 5 i b = 100 Bª¦dy Bardzo prosty przykªad. Mamy dwa wyra»enia: Wyra»enie 1 x = ((b + a) − a)/b Wyra»enie 2 y = (b + (a − a))/b Jaki powinien by¢ wynik dziaªa« dla: 1. a = 5 i b = 100 2. a = 1.04 oraz b = 1.0−4 Bª¦dy Bardzo prosty przykªad. Mamy dwa wyra»enia: Wyra»enie 1 x = ((b + a) − a)/b Wyra»enie 2 y = (b + (a − a))/b Jaki powinien by¢ wynik dziaªa« dla: 1. a = 5 i b = 100 2. a = 1.04 oraz b = 1.0−4 3. a = 1.010 oraz b = 1.0−10 Bª¦dy Bardzo prosty przykªad. Mamy dwa wyra»enia: Wyra»enie 1 x = ((b + a) − a)/b Wyra»enie 2 y = (b + (a − a))/b Jaki powinien by¢ wynik dziaªa« dla: 1. a = 5 i b = 100 2. a = 1.04 oraz b = 1.0−4 3. a = 1.010 oraz b = 1.0−10 Sprawd¹my w praktyce. . . Bª¦dy I Najprostsze dodawanie (¹ródªo programu strona MSDN zatytuªowana Why Floating-Point Numbers May Lose Precision ) // F l o a t i n g −point_number_precision . c // Compile o p t i o n s needed : none . Value of c i s p r i n t e d with a // p o i n t p r e c i s i o n of 10 and 6 ( p r i n t f rounded value by d e f a u // show the d i f f e r e n c e # include < s t d i o . h> #define EPSILON 0.0001 // Define your own t o l e r a n c e #define FLOAT_EQ ( x , v ) ( ( ( v − EPSILON ) < x ) && ( x <( v + EPSILON ) ) ) i n t main ( ) { float a, b, c; a = 1.345 f ; Bª¦dy II b = 1.123 f ; c = a + b; // i f ( FLOAT_EQ ( c , 2 . 4 6 8 ) ) // Remove comment f o r c o r r e c t r i f ( c == 2 . 4 6 8 ) // Comment t h i s l i n e f o r c o r r e c t p r i n t f ( " L i c z b y sa rowne . \ n " ) ; else p r i n t f ( " L i c z b y n i e sa rowne ! Wartosc c wynosi %13.10 f " or % f \ n " , c , c ) ; } Komentarz: Program dodaje dwie liczby, a wynik zapisuje w zmiennej o nazwie c, a nast¦pnie sprawdza czy wynik jest taki jak oczekiwano. Niestety nie jest. Wyniki: Bª¦dy III Liczby nie sa rowne! Wartosc c wynosi 2.4679999352 Dªugotrwaªe obliczenia I Program w Pascalu dokonuj¡cy wielokrotnie prostej dosy¢ operacji. Na podstawie Some issues on oating-point precision under Linux program caos ; { $n+ } { you need to a c t i v a t e hardware f l o a t i n i n order to use the extended type } uses crt ; var s : single ; { 32− b i t r e a l } Dªugotrwaªe obliczenia II r : real ; d : double ; e : extended ; i : integer ; begin clrscr ; s r d e := := := := 0.5; 0.5; 0.5; 0.5; { 48− b i t r e a l } { 64− b i t r e a l } { 80− b i t r e a l } Dªugotrwaªe obliczenia III f o r i : = 1 to s : = 3.8 ∗ r : = 3.8 ∗ d : = 3.8 ∗ e : = 3.8 ∗ 100 s ∗ r ∗ d ∗ e ∗ do (1 (1 (1 (1 begin − s ); − r ); − d); − e); i f ( i /10 = i n t ( i / 1 0 ) ) then begin writeln ( i :10 , s :16:5 , r :16:5 , d:16:5 , e :16:5); end ; end ; Dªugotrwaªe obliczenia IV readln ; end . Program wykonuje do±¢ proste obliczenia: sto razy wylicza wyra»enie: x = 3.8 ∗ x ∗ (1 − x) Drukowana jest co dziesi¡ta warto±¢: Dªugotrwaªe obliczenia V 10 20 30 40 50 60 70 80 90 100 0.18510 0.23951 0.88423 0.23013 0.76654 0.42039 0.93075 0.28754 0.82584 0.38775 0.18510 0.23963 0.90200 0.82493 0.53714 0.66878 0.53190 0.93557 0.69203 0.41983 0.18510 0.23963 0.90200 0.82493 0.53714 0.66878 0.53190 0.93557 0.69203 0.41983 Wida¢ wyra¹nie, »e precyzja liczb ma wpªyw na wyniki oblicze«. . . 0.18510 0.23963 0.90200 0.82493 0.53714 0.66879 0.53203 0.93275 0.79884 0.23138 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¦gu 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 »adnymi bª¦dami. 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 U»ywamy komputera do dokonania jakich± oblicze«. I Komputer podaje wynik (a = 5,34273343) maj¡cy 8 cyfr po przecinku. Obliczenia I U»ywamy komputera do dokonania jakich± oblicze«. I Komputer podaje wynik (a = 5,34273343) maj¡cy 8 cyfr po przecinku. I 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 U»ywamy komputera do dokonania jakich± oblicze«. I Komputer podaje wynik (a = 5,34273343) maj¡cy 8 cyfr po przecinku. I 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 ? I A co z sytuacj¡, »e zastosowana metoda oblicze« jest maªo dokªadna? Bª¡d bezwzgl¦dny warto±ci przybli»onej I 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. 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 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. π 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« ma α 0,0000027 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 Zatem 0,0015927 0,0016 3,14 ⇒ 3,14 Reguªy zaokr¡glania 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). I Gdy pierwsz¡ odrzucon¡ cyfr¡ jest 0, 1, 2, 3, 4 cyfr pozostawionych w warto±ci przybli»onej nie zmieniamy. I 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. Taka zmiana liczby przybli»onej nazywa si¦ poprawnym zaokr¡gleniem. Bª¡d wzgl¦dny Bª¦dem wzgl¦dnym warto±ci przybli»onej a obarczonej bª¦dem bezwzgl¦dnym ∆a nazywamy liczb¦: εa = ∆a |a| 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 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 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ªó»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 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). Literatura dodatkowa I John Bayko. Great microprocessors of the past and present. http://jbayko.sasktelwebsite.net/cpu.html, 2003. Jeremy G. Butler. Information technology history - outline. http://www.tcf.ua.edu/AZ/ITHistoryOutline.htm, 1998. David Goldberg. What every computer scientist should know about Floating-Point arithmetic. Numerical Computation Guide. Sun Microsystems, Palo Alto, 2000. Literatura dodatkowa II Dost¦pne jako: http://docs.sun.com/source/806-3568/ ncg_goldberg.html#674. Witold Komorowski. Architektura Minikomputerow. Wydawnictwa Naukowo-Techniczne, Warszawa, 1980. Witold Komorowski. Architektura Komputerów. Wydawnictwo Politechniki Wrocªawskiej, Warszawa, 1986. Witold Komorowski. Architektura Komputerow: Skrypt. Politechnika Wrocªawska, Wrocªaw, 1987. Literatura dodatkowa III Witold Komorowski. Instrumenta Computatoria: [wybrane Architektury Komputerów]. "Helion", Gliwice, 2000. Witold Komorowski. Krótki Kurs Architektury I Organizacji Komputerów. Mikom, Warszawa, 2004. 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 IV 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 zdj¦ciem przedstawiaj¡cym fragment procesora. Pavert, rob van de. CPU, Stycze« 1, 2005. http://www.flickr.com/photos/rob20/101300834/.