Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Podstawy arytmetyki komputerowej Paweł Perekietka

Podobne prezentacje


Prezentacja na temat: "Podstawy arytmetyki komputerowej Paweł Perekietka"— Zapis prezentacji:

1

2 Podstawy arytmetyki komputerowej Paweł Perekietka

3 Notacja uzupełnieniowa (kod U2) Błąd przepełnienia (nadmiaru)
Spis treści Reprezentacja liczb całkowitych Notacja uzupełnieniowa (kod U2) Błąd przepełnienia (nadmiaru) Notacja z przesunięciem Notacja zmiennopozycyjna. Reprezentacja liczb całkowitych i niecałkowitych Notacja wykładnicza Gęstość (precyzja) reprezentacji Błędy zaokrąglenia

4 Reprezentacja liczb całkowitych

5 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: Uwaga: Liczby 4 nie można reprezentować w systemie 3-bitowym. Uwaga: System 3-bitowy (i później 4-bitowy) służą do demonstracji. W praktyce stosuje się oczywiście systemy 32-bitowe itp. Wartości nieujemne tworzy się począwszy od ciągu zer odpowiedniej długości, a następnie dodając binarnie jedynkę aż do uzyskania ciągu rozpoczynającego się od 0, po czym następują same 1. Otrzymujemy reprezentacje liczb 0, 1, 2, 3. Ciągi reprezentujące liczby ujemne uzyskuje się począwszy od ciągu jedynek (111), od której odejmuje się binarnie jeden aż do uzyskania ciągu rozpoczynającego się od 1, po której następują same 0.

6 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). 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. W konsekwencji istnieje prosty algorytm przekształcający reprezentację liczby na reprezentację liczby przeciwnej: polega on na skopiowaniu ciągu bitów od prawej do lewej aż do pierwszej 1, a następnie na zamianie pozostałych bitów na bity przeciwne. W przypadku liczby jednobitowej (0 lub 1) zamiana bitu na przeciwny jest równoważna odejmowaniu danej liczby od 2 (uzupełniamy wartości liczby do dwóch). Stąd nazwa.

7 Reprezentacja liczb całkowitych. Kod U2
Ćwiczenie: Zapisz liczbę –13 w systemie 8-bitowym w notacji U2. 13 = , więc 13 = ?????????2 co dalej?

8 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: + (-13) Uwaga: Pojawiające się w czasie odejmowania przeniesienia poza bit znaku są ignorowane. Popularność notacji U2 wynika również z tego, że stosując ją ławo zanegować liczbę (wyznaczyć kod liczby przeciwnej). Te własności U2 powodują, że ogromnie upraszcza to budowę układów odpowiedzialnych za operacje arytmetyczne w procesorach. System U2 ma też swoje wady…

9 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 = 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 W notacji uzupełnieniowej do dwóch błąd przepełnienia może wystąpić przy dodawaniu dwóch wartości dodatnich lub dwóch wartości ujemnych. W obu przypadkach błąd przepełnienia można wykryć sprawdzając bit znaku sumy: przepełnienie występuje wtedy, kiedy wynikiem dodawania dwóch wartości dodatnich jest ciąg bitów rozpoczynający się od 1 lub kiedy suma dwóch wartości ujemnych rozpoczyna się od 0.

10 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 = 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 roku i to na większą skalę. Dlaczego? Okazuje się, że dzień 19 września 1989 r. był dniem po 1 stycznia 1900 r… I nastąpiło zjawisko tzw. przewijania licznika: do największej liczby dodatniej w danej reprezentacji (np ) dodajemy liczbę 1 (np ) i otrzymujemy najmniejszą reprezentowalną liczbę …ujemną (np ). Źródło problemu roku 2038 wynika ze sposobu zliczania czasu w oprogramowaniu (np. uniksowym i innym przygotowanym z użyciem pewnej biblioteki kompilatora C), w którym korzysta się z wartości 32-bitowej zmiennej (ze znakiem) zawierającej liczbę sekund, które upłynęły od 1 stycznia 1970 roku (początku tzw. ery Uniksa). Maksymalna wartość zmiennej zostanie przekroczona 19 stycznia 2038 o godzinie 3:14:07.

11 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: Uwaga: Każdej długości reprezentacji odpowiada optymalna wartość przesunięcia. Np. dla systemu 4-bitowego będzie to 7. Slajd przedstawia przykład notacji z przesunięciem 3. Skąd wzięła się ta nazwa? Każdej z liczb przypisany jest kod, który w naturalnej reprezentacji binarnej (bez znaku) odpowiada liczbie większej o 3. Na przykład: 011 jest naturalnym kodem liczby 3, a w notacji z nadmiarem jest reprezentacją liczby 0. Każdej długości reprezentacji odpowiada optymalna wartość przesunięcia – chodzi o to, by było możliwe kodowanie liczb z możliwie najszerszego symetrycznego względem zera zakresu liczb. Kod z nadmiarem jest najczęściej wykorzystywany do zapisu części wykładniczej liczb zmiennopozycyjnych. Będzie o tym mowa w dalszej części lekcji.

12 Notacja zmiennopozycyjna
Notacja zmiennopozycyjna. Reprezentacja liczb całkowitych i niecałkowitych

13 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: 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) Dla celów dydaktycznych posłużymy się przykładami, w których do zapamiętania liczby stosuje się tylko jeden bajt. Mimo, że w praktyce stosuje się formaty kilkubajtowe (np. 64-bitowe dla formatu double-precision IEEE 754), to wszystkie ważne pojęcia da się zilustrować, posługując się systemem 8-bitowym. Mantysa ma postać znormalizowaną, to znaczy jest liczbą z przedziału <1; 2). Ponieważ część całkowita jest znana (zawsze równa 1), więc nie jest zapamiętywana.

14 Notacja zmiennopozycyjna. Przykład
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 jest więc binarną reprezentacją liczby 6 3/4 Znormalizowana mantysa to 1,1011. Wymnożenie je przez liczbę 22 (w naturalnym kodzie dwójkowym to 10) oznacza przesunięcie przecinka 1,1011 o dwie pozycje w prawo.

15 Notacja zmiennopozycyjna. 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: Przykład 3: Jak zapisać 0 (zero) w notacji zmiennopozycyjnej? Reprezentacja zera ma specjalny wzór bitowy – jest ciągiem złożonym z samych zer. Standard IEEE 754 określa też inne specjalne wzory bitowe, np …11 000…000 dla +∞ i …11 000…000 dla -∞.

16 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: Znormalizowana mantysa musi być zawsze liczbą z przedziału <1,2). Stąd przesunięcie przecinka. Oznacza to, że w tym przypadku wartość wykładnika musi być w konsekwencji równa 1.

17 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 Możliwe wartości są rozłożone gęściej bliżej liczby 0. W formacie 8-bitowym wszystkie inne liczby większe od zera przybliżane jedną z wymienionych na slajdzie. Liczba 1 to oczywiście 1,0 * 20, czyli (wykładnik równy 0). Liczba 1,0625 = 1 1/16. Pokazaliśmy wcześniej, że jej reprezentacja to Następna liczba możliwa to zapisania w tej reprezentacji będzie o 0,0001, tj. 1/16 większa, czyli jest to 1 1/8 = 1,125. Liczba 1,9375 zakodujemy tak: Liczba 2 (1,0 * 21) będzie mieć reprezentację (wykładnik równy 1). Zmiana najmniej znaczącego bitu mantysy na 1 oznacza teraz dodanie 2 * 0,0001, tj. 1/8! To oznacza, że kolejne 16 liczb będzie tworzyć ciąg arytmetyczny o różnicy 1/8. Itd.. W tym formacie można zapisać dokładnie kolejną liczbę naturalną (tzw. następnik) tylko dla liczb mniejszych nie większych niż 31. Maksymalna liczba różnych wartości, które mogą być reprezentowane za pomocą 8 bitów wynosi 28 = 256. W praktyce funkcjonują specjalne wzory bitowe – dla liczby 0, …11 000…000 dla +∞ i …11 000…000 dla -∞. Nierównomierne rozmieszczenie liczb to jeden z kompromisów matematyki zmiennopozycyjnej: możemy reprezentować liczby bardzo duże i bardzo małe, ale tylko skończoną ich liczbę w sposób dokładny.

18 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, Dlaczego? 0,125, 0, , 0,140625, …, 0, 0,25, 0,265625, 0,28125, …., 0,484375 0,5, 0,53125, 0,5625, …, 0,96875 Czy liczba 0 ma swoją reprezentację? Kod (w notacji naturalnej to 0,001) odpowiada liczbie 1/8 = 0,125. Następna liczba to 0, Dlaczego? To suma 1/8 i 1/128, czyli liczba Mamy więc: 0,125, 0, , 0,140625, …, 0, 0,25, 0,265625, 0,28125, …., 0,484375 0,5, 0,53125, 0,5625, …, 0,96875 Jeśli uwzględnić specjalne wzory bitowe dla 0 oraz dla -∞ i +∞, to w formacie 8-bitowym zabraknie kodów dla czterech liczb. Jakich?

19 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, W polu części ułamkowej zapiszemy tylko 0010! Wykładnik to 1. W notacji z nadmiarem: 100. Otrzymamy , co jest reprezentacją … 2 1/4. Zjawisko to nazywa się błędem zaokrąglenia. Błąd zaokrąglenia oznacza, że część wartości, którą chcemy zapisać, zostaje zagubiona, gdyż pole części ułamkowej nie jest wystarczająco duże. Najbardziej poważny problem stanowi zjawisko niedomiaru. Występuje wtedy, gdy wielkość ułamkowa jest zbyt mała i jest przybliżana przez 0.

20 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 ≈ = 4 ½ 4 ½ + 1/8 = … = 4 ½ Dodajemy od prawej do lewej: 1/8 + 1/8 = ¼ = 0,012 = 4 ½ + ¼ = 4 3/4 = 100,112 = Wniosek: Kolejność wykonywania działań jest istotna. W czasie dodawania od lewej do prawej dwukrotnie pojawia się błąd zaokrągleń… Wykonując dodawania od prawej do lewej otrzymamy wynik dokładny! Kolejność wykonywania działań jest istotna. Problemy powstają przy dodawaniu do bardzo dużej liczby wartości bardzo małej; dochodzi wtedy do obcięcia małej wartości. Zatem ogólną regułą jest zsumowanie najpierw małych wartości w nadziei, że dadzą w sumie wystarczająco dużą, aby nie została obcięta przy dodawaniu do wartości większych. Jeśli liczby małe są przemieszane z dużymi, to zamiast zmieniania ich kolejności przed sumowaniem, stosuje się np. algorytm Gilla-Moellera, kumulujący osobno nieuwzględnione przy dodawaniu „kawałki” mniejszych składników, tworząc z nich „poprawkę” do otrzymanej sumy. Warto dopowiedzieć, że zagadnieniami arytmetyki zmiennopozycyjnej, a więc na przykład problemem kumulowania się błędów zaokrągleń, zajmują się naukowcy (matematycy i informatycy) pracujący w dziedzinie analizy numerycznej.

21 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: … 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… W notacji dwójkowej (binarnej) więcej liczb ma rozwinięcie nieskończone niż w przypadku notacji dziesiątkowej. Np. 1/5 i 1/10. Rozmiar błędów zaokrągleń można zmniejszyć, stosując dłuższe pole części ułamkowej. Powszechnie w praktyce stosuje się dzisiaj 52 bity dla mantysy (format double, tzw. podwójnej precyzji). Stosuje się zarazem większe pole wykładnika (11 bitów). Nawet jednak przy użyciu takich dłuższych formatów zdarzają się sytuacje, w których wymagana jest jeszcze większa dokładność. Trudno wyobrazić sobie sytuację, aby stosować notację zmiennoprzecinkową do przechowywania informacji finansowych i wykonywania na nich działań arytmetycznych… W takich przypadkach, projektując oprogramowanie, należy stosować2121 precyzyjną arytmetykę (np. w przypadku złotówek jako jednostkę wybrać gorsze i wykonywać działania na liczbach całkowitych lub stosować specjalne typy rzeczywiste stałopozycyjne, dostępne w kompilatorach języka porogramowania).

22


Pobierz ppt "Podstawy arytmetyki komputerowej Paweł Perekietka"

Podobne prezentacje


Reklamy Google