1 Podstawy arytmetyki komputerowej Paweł Perekietka 2 Spis treści 1. Reprezentacja liczb całkowitych – Notacja uzupełnieniowa (kod U2) – Błąd przepełnienia (nadmiaru) – Notacja z przesunięciem 2. Notacja zmiennopozycyjna. Reprezentacja liczb całkowitych i niecałkowitych – Notacja wykładnicza – Gęstość (precyzja) reprezentacji – Błędy zaokrąglenia 3 Reprezentacja liczb całkowitych 4 Reprezentacja liczb całkowitych. Kod U2 Najpopularniejszym systemem reprezentacji liczb całkowitych w systemach informatycznych jest notacja uzupełnieniowa do dwóch (kod U2). W przypadku systemu 3-bitowego, wygląda tak: 011 010 001 000 111 110 101 100 3 2 1 0 -1 -2 -3 -4 Uwaga: Liczby 4 nie można reprezentować w systemie 3-bitowym. 5 Reprezentacja liczb całkowitych. Kod U2 W systemie uzupełnieniowym do dwóch, wartość lewego skrajnego bitu decyduje o znaku liczby. Dlatego mówi się o bicie znaku (ang. sign bit). 0111 0110 0101 0100 0011 0010 0001 7 6 5 4 3 2 1 1001 1010 1011 1100 1101 1110 1111 -7 -6 -5 -4 -3 -2 -1 Między reprezentacjami liczb przeciwnych istnieje zależność: • są identyczne od prawej aż do pozycji pierwszej jedynki • dalej są swoimi uzupełnieniami do dwóch, tzn. tworzą je takie ciągi bitów, że jeden można otrzymać z drugiego przez zamianę wszystkich 0 na 1 i 1 na 0. Uwaga: W systemie 4-bitowym nie zapiszemy liczby przeciwnej do -8 =10002. 6 Reprezentacja liczb całkowitych. Kod U2 Ćwiczenie: Zapisz liczbę –13 w systemie 8-bitowym w notacji U2. • 13 = 8 + 4 + 1, więc 13 = ?????????2 • co dalej? 00001101 11110011 7 Reprezentacja liczb całkowitych. Kod U2 Popularność notacji U2 wynika m.in. z faktu, że operacje dodawania i odejmowania są w nim wykonywane tak samo, jak dla liczb binarnych bez znaku (naturalnego kodu binarnego). Oto przykład dla systemu 8-bitowego: 57 + (-13) 00111001 11110011 --------------------44 00101100 Uwaga: Pojawiające się w czasie odejmowania przeniesienia poza bit znaku są ignorowane. 8 Reprezentacja liczb całkowitych. Przepełnienie Błąd przepełnienia (nadmiaru) (ang. overflow) pojawia się wtedy, kiedy liczba, którą chcemy zakodować, nie mieści się w zakresie reprezentowanych w kodzie wartości. Przykład: W systemie 4-bitowym nie da się zapisać wartości 9. Oznacza to, że nie możemy otrzymać poprawnego wyniku dodawania 5 + 4 = 0101 + 0100. Jak wykryć błąd przepełnienia? Uwaga: W praktyce powszechnie stosuje się systemy co najmniej 32-bitowe. Umożliwia to zapamiętywanie bez przepełnienia wartości dodatnich aż do 2 147 483 647.. 9 Reprezentacja liczb całkowitych. Przepełnienie Programiści (i świadomi użytkownicy komputerów) powinni uświadamiać sobie, że dodawanie do siebie wielu małych wartości da w wyniku dużą liczbę. Przykład: Dawniej powszechnie stosowano ciągi 16-bitowe. Przepełnienie nie następowało zatem jedynie do wartości 215 = 32 768. 19 września 1989 r., po latach niezawodnej pracy, system komputerowy w pewnym szpitalu nagle przestał działać. Co okazało się przyczyną problemu? Uwaga: Awaria, podobna do wyżej opisanej, może powtórzyć się 19 stycznia 2038 roku i to na większą skalę. Dlaczego? 10 Notacja (kod) z przesunięciem Inną metodą reprezentacji wartości całkowitych jest notacja z przesunięciem. Dla systemu 3-bitowego z przesunięciem 3, wygląda tak: 111 110 101 100 011 010 001 000 4 3 2 1 0 -1 -2 -3 Uwaga: Każdej długości reprezentacji odpowiada optymalna wartość przesunięcia. Np. dla systemu 4-bitowego będzie to 7. 11 Notacja zmiennopozycyjna. Reprezentacja liczb całkowitych i niecałkowitych 12 Notacja zmiennopozycyjna Reprezentacja liczb niecałkowitych (z częścią ułamkową) wymaga sposobu na zapamiętanie „kropki” oddzielającej część ułamkową od całkowitej. Stosowana jest notacja zmiennopozycyjna, wywodząca się z notacji naukowej (wykładniczej). ± B * 2A Przykład dla precyzji 8-bitowej: 0 101 1011 • Najbardziej znaczący bit przeznacza się na bit znaku. • Pozostałe bity dzieli się na dwie grupy, zwane polami: – pole A wykładnika (ang. exponent field) – pole B części ułamkowej mantysy (ang. mantissa field) 13 Notacja zmiennopozycyjna. Przykład Przykład 1: 0 101 1011 • Bit znaku ma wartość 0. • Wykładnik to 101. • Część ułamkowa mantysy to 0,1011. Wykładnik to liczba całkowita zapisana w notacji z nadmiarem. W tym przypadku będzie to liczba 2. Otrzymujemy liczbę, która w naturalnym kodzie dwójkowym będzie równa 110,11 01011011 jest więc binarną reprezentacją liczby 6 3/4 14 Notacja zmiennopozycyjna. Przykład 2 Przykład 2: Zapisać liczbę 1 1/16 w notacji zmiennopozycyjnej. • Bit znaku będzie miał wartość 0. • 1 1/16 = 1,0625 w naturalnym kodzie to 1,0001. • Część ułamkowa mantysy to zatem 0,0001. • Wykładnik to 0. W notacji z nadmiarem: 011. Pełny bajt wygląda zatem następująco: 00110001. Przykład 3: Jak zapisać 0 (zero) w notacji zmiennopozycyjnej? 15 Notacja zmiennopozycyjna. Przykład Zadanie: Zapisać liczbę 2 5/8 w notacji zmiennopozycyjnej. • Bit znaku będzie miał wartość 0. • 2 5/8 w naturalnym kodzie to 10,101. • Znormalizowana postać mantysy to 1,0101. • Część ułamkowa mantysy to zatem 0,0101. • Wykładnik to 1. W notacji z nadmiarem: 100. Pełny bajt wygląda zatem następująco: 01000101. 16 Notacja zmiennopozycyjna. Gęstość liczb Liczby reprezentowane w notacji zmiennopozycyjnej nie są rozmieszczone równomiernie na osi liczbowej. Przykład: W formacie 8-bitowym można zapisać takie liczby dziesiętne większe od 1: • • • • • 1, 1,0625, 1,125, 1,1875, …, 1,9375 2, 2,125, 2,25, 2,375, …, 3,875 4, 4,25, 4,5, 4,75, …, 7,75 8, 8,5, 9, 9,5, …, 15,5 16, 17, 18, …, 31 17 Notacja zmiennopozycyjna. Gęstość liczb Zadanie: Jakie liczby dziesiętne dodatnie mniejsze od 1 można zapisać w formacie 8-bitowym? • Najmniejsza w naturalnym kodzie dwójkowym ma postać: 0,001. Dlaczego? • Kolejna liczba, którą można dokładnie zapisać ma postać: 0,0010001. Dlaczego? • 0,125, 0,1328125, 0,140625, …, 0,2421875 • 0,25, 0,265625, 0,28125, …., 0,484375 • 0,5, 0,53125, 0,5625, …, 0,96875 • Czy liczba 0 ma swoją reprezentację? 18 Notacja zmiennopozycyjna. Błąd zaokrąglenia Przykład: Zapisz liczbę 2 5/16 (2,3125) w systemie 8-bitowym. • Bit znaku będzie miał wartość 0. • 2 5/16 w naturalnym kodzie to 10,0101. • Znormalizowana postać mantysy to 1,00101. • Część ułamkowa mantysy to zatem 0,00101. W polu części ułamkowej zapiszemy tylko 0010! • Wykładnik to 1. W notacji z nadmiarem: 100. Otrzymamy 01000010, co jest reprezentacją … 2 1/4. Zjawisko to nazywa się błędem zaokrąglenia. 19 Notacja zmiennopozycyjna. Błąd zaokrąglenia Przykład: Wykonać dodawanie: 4 1/2 + 1/8 + 1/8. • Dodajemy od lewej do prawej: – 4 ½ + 1/8 = 4 5/8 = 100,1012 ≈ 0 101 0010 = 4 ½ – 4 ½ + 1/8 = … = 4 ½ • Dodajemy od prawej do lewej: – 1/8 + 1/8 = ¼ = 0,012 = 0 001 0000 – 4 ½ + ¼ = 4 3/4 = 100,112 = 0 101 0011 Wniosek: Kolejność wykonywania działań jest istotna. 20 Notacja zmiennopozycyjna. Błąd zaokrąglenia Źródłem błędów zaokrągleń jest również problem nieskończonego binarnego rozwinięcia ułamka. Np. 1/10 ma rozwinięcie: 0.000110011001100110011001100… Rozmiar błędów zaokrągleń można zmniejszyć, stosując dłuższe pole części ułamkowej (format tzw. podwójnej precyzji). Notacji zmiennoprzecinkowej nie stosuje się do przechowywania informacji finansowych i wykonywania na nich działań arytmetycznych… 21 22