Podstawy arytmetyki komputerowej Paweł Perekietka

Slides:



Advertisements
Podobne prezentacje
Tablice 1. Deklaracja tablicy
Advertisements

Kod Hamminga Podstawy Telekomunikacji Autor: Paweł Zajdel
DYSKRETYZACJA SYGNAŁU
Operacje zmiennoprzecinkowe
Języki programowania C++
Metody numeryczne Wykład no 1.
Reprezentowanie i przetwarzanie informacji przez człowieka i komputer. Patrycja Białek.
Liczby w Komputerze Zajęcia 3.
Liczby wokół nas A. Cedzidło.
Wykład 2: Liczby rzeczywiste (stało i zmiennoprzecinkowe) Koprocesor
B. znaki alfabetu D. obrazy
Systemy liczbowe w architekturze komputerów materiał do wykładu 1/3
SYSTEMY LICZBOWE.
Liczby całkowite.
ARCHITEKTURA WEWNĘTRZNA KOMPUTERA
LICZBY RZECZYWISTE PODZBIORY ZBIORU LICZB RZECZYWISTYCH
dr Anna Kwiatkowska Instytut Informatyki
Zapis informacji Dr Anna Kwiatkowska.
Reprezentacje - zmiennoprzecinkowa
Systemy liczbowe.
„Są plusy dodatnie i plusy ujemne.”
Aleksandra Duchnowicz kl. 6.d
Technika Mikroprocesorowa 1
Technika Mikroprocesorowa 1
opracowanie: Agata Idczak
Informatyka I Język ANSI C
Wyrażenia algebraiczne
Cyfrowe układy logiczne
Podstawy informatyki (2)
Reprezentacja stało i zmiennopozycjna
Architektura komputerów
ZASADY PODZIAŁU SIECI NA PODSIECI, OBLICZANIA ADRESÓW PODSIECI,
Jednostki w informatyce i system binarny (dwójkowy)
System dwójkowy (binarny)
Minimalizacja funkcji boolowskich
Minimalizacja funkcji boolowskich
Systemy liczbowe.
Architektura systemów komputerowych
Liczby rzeczywiste ©M.
Liczby całkowite dodatnie BCN
  Prof.. dr hab.. Janusz A. Dobrowolski Instytut Systemów Elektronicznych, Politechnika Warszawska.
Posługiwanie się systemami liczenia
Podstawy informatyki 2013/2014
Źródła błędów w obliczeniach numerycznych
Stało- i zmiennopozycyjna reprezentacja liczb binarnych
Matematyka i system dwójkowy
Reprezentacja liczb w systemie binarnym ułamki i liczby ujemne
Stało- i zmiennopozycyjna reprezentacja liczb binarnych
Bramki logiczne i układy kombinatoryczne
Programowanie Niskopoziomowe
WYKŁAD 3 Temat: Arytmetyka binarna 1. Arytmetyka binarna 1.1. Nadmiar
Dwójkowy system liczbowy
T. 3. Arytmetyka komputera. Sygnał cyfrowy, analogowy
Działania w systemie binarnym
Własności bramek logicznych RÓZGA DARIUSZ 20061
Podstawy Techniki Cyfrowej
NIM gra Beata Maciejewska Monika Mackiewicz.
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
POZNAJ ŚWIAT LICZB CAŁKOWITYCH
Wybrane aspekty programowania w C++ (i nie tylko)
Zasady arytmetyki dwójkowej
Rodzaje Liczb JESZCZE SA TAKIE
Rodzaje liczb.
METODY REPREZENTOWANIA IFORMACJI
INFORMATYKA Zajęcia organizacyjne Arytmetyka komputerowa
Liczby naturalne i całkowite Spis treści Definicje Działania na liczbach Wielokrotności liczb naturalnych Cechy podzielności Przykłady potęg,potęgi o.
Liczbami naturalnymi nazywamy liczby 0,1,2,3,..., 127,... Liczby naturalne poznaliśmy już wcześniej; służą one do liczenia przedmiotów. Zbiór liczb.
Podstawy Informatyki.
Technika Mikroprocesorowa 1
Wstęp do Informatyki - Wykład 6
Zapis prezentacji:

Podstawy arytmetyki komputerowej Paweł Perekietka

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

Reprezentacja liczb całkowitych

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 3 010 2 001 1 000 0 111 -1 110 -2 101 -3 100 -4 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.

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 7 1001 -7 0110 6 1010 -6 0101 5 1011 -5 0100 4 1100 -4 0011 3 1101 -3 0010 2 1110 -2 0001 1 1111 -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. 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.

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

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 00111001 + (-13) 11110011 --------------------- 44 00101100 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…

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

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? Okazuje się, że dzień 19 września 1989 r. był 32 768 dniem po 1 stycznia 1900 r… I nastąpiło zjawisko tzw. przewijania licznika: do największej liczby dodatniej w danej reprezentacji (np. 01111111) dodajemy liczbę 1 (np. 00000001) i otrzymujemy najmniejszą reprezentowalną liczbę …ujemną (np. 10000000). Ź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.

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 4 110 3 101 2 100 1 011 0 010 -1 001 -2 000 -3 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.

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

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

Notacja zmiennopozycyjna. Przykład 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 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.

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: 00110001. 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. 0 1111…11 000…000 dla +∞ i 1 1111…11 000…000 dla -∞.

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

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 0 011 0000 (wykładnik równy 0). Liczba 1,0625 = 1 1/16. Pokazaliśmy wcześniej, że jej reprezentacja to 0 011 0001. 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: 0 011 1111. Liczba 2 (1,0 * 21) będzie mieć reprezentację 0 100 0000 (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 – 0 00..0 00..00 dla liczby 0, 0 1111…11 000…000 dla +∞ i 1 1111…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.

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ę? Kod 0 0000 000 (w notacji naturalnej to 0,001) odpowiada liczbie 1/8 = 0,125. Następna liczba to 0,1328125. Dlaczego? To suma 1/8 i 1/128, czyli liczba 0 000 0001. Mamy więc: 0,125, 0,1328125, 0,140625, …, 0,2421875 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?

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

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

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… 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).