Podstawy Informatyki Wykład 2 Reprezentacja liczb w komputerze Jednostki informacji Bit (ang. bit) (Shannon, 948) Najmniejsza ilość informacji potrzebna do określenia, który z dwóch równie prawdopodobnych stanów przyjął układ. Jednostka informacji (b). Bajt (ang. byte) (Shannon, 948) Najmniejsza adresowalna jednostka informacji pamięci komputerowej, składająca się z bitów. Zazwyczaj przyjmuje się, że B = 8b (oktet), ale nie jest to reguła! Najbardziej znaczący bit (bajt) - bit (bajt) o największej wadze (w zapisie z lewej strony). Najmniej znaczący bit (bajt) - bit (bajt) o najmniejszej wadze (w zapisie z prawej strony). Nazwa (symbol) kilobit (kb) megabit (Mb) gigabit (Gb) terabit (Tb) petabit (Pb) exabit (Eb) zettabit (Zb) yottabit (Yb) Prefiksy SI dziesiętny 3 6 9 2 5 8 2 24 Standard SI dwójkowy 2 2 2 2 3 2 4 2 5 2 6 2 7 2 8 Różnica, % 2.4 4.86 7.37 9.95 2.59 5.29 8.6 2.89 Prefiksy binarne Nazwa (symbol) kibibit (Kibit) mebibit (Mibit) gibibit (Gibit) tebibit (Tibit) pebibit (Pibit) exbibit (Eibit) zebibit (Zibit) yobibit (Yibit) Sposoby zapisu danych w pamięci Pamięć w komputerach adresowana jest (najczęściej) liniowo. Jak zapisać wielobajtowe dane pod danym adresem? W jakiej kolejności przesyłać kolejne bajty? 4A3B2CD(h) Big-endian Najbardziej znaczący bajt jest umieszczany jako pierwszy. 99 2 3 4... 4A 3B 2C D... np. procesory: SPARC, Motorola 68, PowerPC. Little-endian Najmniej znaczący bajt jest umieszczany jako pierwszy. dwójkowy, ósemkowy, Systemy pozycyjne dziesiętny (Indie Arabowie Europa), dwunastkowy (Babilonia, Rzym,średnowieczna Europa, W.Brytania, USA szyling=2 pensów, stopa=2cali, cal=2 linii, linia =2 punktów), szesnastkowy, phi-base system (wsp. złotego podziału jako podstawa). 99... D 2C 2 3B 3 4A 4... np. procesory: Intel x86, AMD64.
Systemy pozycyjne W pozycyjnych systemach liczbowych ten sam symbol (cyfra) ma różną wartość w zależności od pozycji, którą zajmuje w zapisie danej liczby. 4 i x = c4c3c2cc = c i p i= p podstawa systemu pozycyjnego. Do zapisu liczby służą cyfry c i (których jest p) ustawiane na kolejnych pozycjach.pozycje numerujemy od zaczynając od strony prawej zapisu. Każda pozycja posiada swoją wagę równą p i. Wartość liczby obliczamy sumująć iloczyny cyfr przez wagi ich pozycji. Systemy pozycyjne zapis liczby ułamkowej x = c n n c2cc c c 2... c m = ci i= m.... Część ułamkowa liczby m pozycji. Część całkowita liczby n pozycji. Wartość liczby obliczamy sumując iloczyny cyfr przez wagi ich pozycji. p i System dziesiętny Cyfry:,, 2, 3, 4, 5, 6, 7, 8, 9. Przykład: 55.825 = 5* +5* +8* - +* -2 +2* -3 +5* -4 System ten jest wygodny dla człowieka, ale nie dla maszyny. Reprezentacja cyfry dziesiętnej cyfra zajmuje cztery bity pamięci komputera. W ten sposób marnujemy pamięć niektóre kombinacje (np. ) są niewykorzystane. System dwójkowy (binarny) Gottfried Leibnitz, XVIIw. Cyfry:,. Przykład:. 2 = *2 5 + *2 4 + *2 3 + *2 2 + *2 + *2. + *2 - + *2-2 + *2-3 + *2-4 System ten jest wygodny maszyny. Reprezentacja cyfry binarnej zajmuje dokładnie jeden bit. n-cyfrowa liczba binarna bez znaku zajmuje n bitów w pamięci komputera. Konwersja kodu dziesiętnego na dwójkowy Część całkowitą liczby dzielimy sukcesywnie przez 2 i bierzemy reszty 55 27 3 6 3 55 () = (2) 55.825 Część ułamkową liczby mnożymy sukcesywnie przez 2 i bierzemy część całkowitą 625 25 5 825.825 () =. (2) 55.825 () =. (2) Konwersja kodu dziesiętnego na dwójkowy Nie każdy ułamek skończony w systemie dziesiętnym jest ułamkiem skończonym w systemie dwójkowym!. () =?. () =... (2) =.() 2 4 8 6 2 4 8 6 2......
System szesnastkowy Cyfry:,, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. System łaczy zalety systemu binarnego (dobre wykorzystanie pamięci) oraz dziesiątkowego (zwięzłość). Reprezentacja cyfry szesnastkowej zajmuje 4 bity: Cyfra () (2) Cyfra () (2) 2 3 4 5 6 7 2 3 4 5 6 7 8 9 A B C D E F 8 9 2 3 4 5 Reprezentacja liczb całkowitych Założenie: liczba całkowita ze znakiem jest zapisywana w słowach n-bitowych. (Dla przykładu weźmy n = 8). znak (najbardziej znaczący bit) moduł liczby (7 bitów). Liczba nieujemna jest kodowana jako: znak i kod binarny modułu tej liczby. np. liczba 55 w przykładzie powyżej. Przykład: 37.D = 3*6 + 7*6 + D*6 - Liczba ujemna jest kodowana jako: znak i kod binarny modułu tej liczby. Liczba -55 bo (2) =55 () = -55 + Sposób wygodny dla człowieka. Przy operacjach arytmetycznych trzeba porównać znaki. Reprezentacja liczby : oraz (redundancja). Zakres liczb: [-2 n- +, 2 n- - ] (2 n - liczb). Kod uzupełnień do (U) Liczba ujemna x (analogicznie przeciwna) jest kodowana na jeden z dwóch (równoważnych) sposobów: negujemy (bitowo) kod binarny modułu x albo bierzemy kod binarny liczby 2 n - +x. Sposób : liczba -55 ) Kod binarny modułu (=55): 2) Negacja bitowa: Sposób 2: liczba -55 ) Kod binarny liczby 2 8 - -55 =256-56 =2: Sposób mało wygodny dla człowieka. + Łatwe operacje arytmetyczne. Reprezentacja liczby : oraz. Zakres liczb: [-2 n- +, 2 n- - ] (2 n - liczb). Zasady dodawania Liczby zapisane w kodzie U dodajemy zgodnie z zasadami dodawania dwójkowego, ale 2 jeżeli wystąpi przeniesienie poza bit znaku, to do wyniku należy dodać. (77) + (43) (2) Bez przeniesienia (-77) + (43) (-34) Zasady dodawania Liczby zapisane w kodzie U dodajemy zgodnie z zasadami dodawania dwójkowego, ale 2 jeżeli wystąpi przeniesienie poza bit znaku, to do wyniku należy dodać. (77) + (-43) + (34) Z przeniesieniem (-77) + (-43) + (-2)
Kod uzupełnień do 2 (U2) Liczba ujemna x (analogicznie przeciwna) jest kodowana na jeden z dwóch (równoważnych) sposobów: negujemy (bitowo) kod binarny modułu x i dodajemy ; bierzemy kod binarny liczby 2 n +x. Sposób : liczba -55 ) Kod binarny modułu (=55): Sposób 2: liczba -55 ) Kod binarny liczby 2) Negacja bitowa: 2 8-55 =256-55 =2: 3) Dodanie : Sposób mało wygodny dla człowieka. + Łatwe operacje arytmetyczne. Jedna reprezentacja liczby : Zakres liczb: [-2 n-, 2 n- -] (2 n liczb). Dodawanie w kodzie U2 Dodawanie w kodzie U2 odbywa się zgodnie z zasadami dodawania dwójkowego (-77) + (43) (-34) (-77) + (-43) (-2) (77) + (-43) (34) Nadmiar (integer overflow) Nadmiar występuje wtedy, gdy wynik działania nie mieści się w dopuszczalnym zakresie liczb, które mogą być zapisane w danej reprezentacji. Nadmiar występuje tylko przypadku dodawania liczb tego samego znaku. Założenie: reprezentacja 4-bitowa bez znaku. Liczba 9 + = 2 (9) () (4) bit nadmiaru ustawiony na, przeniesienie. Liczby ułamkowe stałoprzecinkowe Liczba stałopozycyjna (n +m)-bitowa posiada n bitów przeznaczonych na część całkowitą oraz m bitów przeznaczonych na kodowanie części ułamkowej. c n n... c3c2cc. c c 2... c m = ci i= m Założenie: liczba bez znaku. Wartość największa: 2 n - + 2 -m = 2 n 2 -m Wartość najmniejsza: + 2 -m = 2 -m i p Liczby ułamkowe stałoprzecinkowe Rozkład reprezentowanych wartości: równomierny. Błąd zaokrągleń/obcięcia (rounding error, cancellation error) = moduł róznicy pomiędzy wartością dokładną liczby a wartością jej reprezentacji. błąd bezwzględny δ e < 2 -m Reprezentacja liczby. za pomocą pięciu bitów ułamkowych.. 2 =3/32 =.9375 δ e =.-.9375 =.625 =/6 (błąd bezwzględny) δ e /. =.625 =6:25%(błąd względny) Liczby zmiennoprzecinkowe przykłady W wielu zagadnieniach zapis dużych lub bardzo małych liczb w normalnej notacji pozycyjnej jest niewygodny, gdyż wymaga sporej ilości cyfr. Dlatego liczby takie zapisuje się w bardziej wygodny sposób: m e = 9.9 x -3 kg G = 6.67 x - m 3 kg - s -2 N A = 6.22 x 23 mol -
Liczby zmiennoprzecinkowe (floating-point numbers) Liczba zmiennoprzecinkowa x =(-) s m p c s znak liczby, m mantysa, p podstawa systemu, c cecha. m e = 9.9 x -3 kg G = 6.67 x - m 3 kg - s -2 N A = 6.22 x 23 mol - Normalizacja liczby zmiennoprzecinkowej Położenie przecinka w liczbie zmiennoprzecinkowej nie jest ustalone. 273.6 = 2.736 x 2 =.2736 x 3 = 2736 x -2 Znormalizowana liczba zmiennoprzecinkowa to taka liczba, której mantysa spełnia zależność: m <p W systemie dwójkowym znormalizowana liczba zmiennoprzecinkowa ma zawsze część całkowitą równą ±. Zatem, do zakodowania liczby zmiennoprzecinkowej potrzeba zakodować (przyjmujemy, ze podstawa będzie równa 2): znak, mantysę, cechę. Precyzja liczb zmiennoprzecinkowych Założenia: mantysa: 3 bity, bez znaku, liczba stałoprzecinkowa, przecinek po pierwszym bicie, cecha: 3 bity bez znaku, x.xx 2 xxx Możliwe wartości:.........25.5.75.25.5.75.5.5 2 2.5 3 3.5 2 3 4 5 6 7 2 4 6 8 2 4 4 8 2 6 2 24 28 8 6 24 32 4 48 56 6 32 48 64 8 96 2 32 64 96 28 6 92 224 Brak wielu liczb! (np. 9,, 3, 5,... ) Precyzja liczb zmiennoprzecinkowych Próba zakodowania liczby 9 9 =9 2 = 4.5 2 =2.25 2 2 =.25 2 3 =(. 2 ) 2 Ale mamy do dyspozycji tylko format: x:xx 2 xxx A zatem mantysa. zostanie obcięta do. i w ten sposób dostaniemy liczbę: (. 2 ) 2 =8 Mamy tu do czynienia z błędem zaokrąglenia. Wniosek: liczba 9 wymaga większej precyzji. Standard IEEE 754 W celu ujednolicenia reprezentacji binarnej oraz operacji numerycznych na różnych platformach sprzętowych, wprowadzono standard zapisu zmiennoprzecinkowego IEEE 754 (William Kahan). Standard ten definiuje: formaty reprezentacji liczb zmiennoprzecinkowych: single-precision (32 bity), double-precision (64bity), single-extended precision ( 43 bitów) double-extended precision ( 79 bitów, zazwyczaj 8 bitów), wartosci specjalne (np. nieskończoność, NaN), zmiennoprzecinkowe operacje, modele zaokrąglania, wyjątki.
Ogólny format w standardzie IEEE 754 Liczby pojedynczej precyzji sign(bit znaku): liczba dodatnia, liczba ujemna, exponent (cecha): kod z nadmiarem (BIAS = 2 e- - ), fraction (mantysa): liczba stałoprzecinkowa, kod U, pozbawiona najbardziej znaczącego bitu reprezentującego część całkowitą bit ten nie jest przechowywany. 3 23 bit znaku: liczba dodatnia, liczba ujemna, cecha: (BIAS =27), zakres: -26 27, mantysa: m =.fraction Typ Cecha Mantysa Znormalizowane liczby o najmniejszym module: zera liczby nieznormalizowane liczby znormalizowane nieskończoności NaN (nieokreślone) od do 2 e- 2 e - 2 e - dowolna ±2-26 ±.7549435-38 Liczby o największym module: ±(( - (/2) 24 )2 28 ) ± 3.428235 38 Liczby podwójnej precyzji 63 52 bit znaku: liczba dodatnia, liczba ujemna, cecha: (BIAS =23), zakres: -22 23, mantysa: m =.fraction Znormalizowane liczby o najmniejszym module: ±2-22 ±2.225738585722-38 Liczby o największym module: ±(+ ( 2-52) ))2 23 ±.79769334862357 38