Wersja do druku
Transkrypt
Wersja do druku
Podstawy Informatyki Jednostki informacji Bit (ang. bit) (Shannon, 1948) Najmniejsza ilość informacji potrzebna do określenia, który z dwóch równie prawdopodobnych stanów przyjął układ. Jednostka informacji (1b). Bajt (ang. byte) (Shannon, 1948) Najmniejsza adresowalna jednostka informacji pamięci komputerowej, składająca się z bitów. Wykład 2 Reprezentacja liczb w komputerze Zazwyczaj przyjmuje się, że 1B = 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). Sposoby zapisu danych w pamięci Prefiksy SI Nazwa (symbol) Standard SI dziesiętny dwójkowy Różnica, % kilobit (kb) 103 210 2.4 megabit (Mb) 106 220 4.86 gigabit (Gb) 109 230 7.37 terabit (Tb) 1012 240 9.95 petabit (Pb) 1015 250 12.59 exabit (Eb) 1018 260 15.29 zettabit (Zb) 1021 270 18.06 yottabit (Yb) 1024 280 20.89 Prefiksy binarne Nazwa (symbol) •Pamięć w komputerach adresowana jest (najczęściej) liniowo. •Jak zapisać wielobajtowe dane pod danym adresem? kibibit (Kibit) mebibit (Mibit) gibibit (Gibit) tebibit (Tibit) pebibit (Pibit) exbibit (Eibit) zebibit (Zibit) yobibit (Yibit) •W jakiej kolejności przesyłać kolejne bajty? 4A3B2C1D(h) Systemy pozycyjne Big-endian •dwójkowy, Najbardziej znaczący bajt jest umieszczany jako pierwszy. 99 100 101 102 103 104 ... 4A 3B 2C 1D ... np. procesory: SPARC, Motorola 68000, PowerPC. •ósemkowy, •dziesiętny (Indie → Arabowie → Europa), •dwunastkowy (Babilonia, Rzym, średnowieczna Europa, W.Brytania, USA – szyling=12 pensów, stopa=12cali, cal=12 linii, linia =12 punktów), •szesnastkowy, Little-endian Najmniej znaczący bajt jest umieszczany jako pierwszy. 99 100 101 102 103 104 ... 1D 2C 3B 4A ... np. procesory: Intel x86, AMD64. •phi-base system (wsp. złotego podziału jako podstawa). 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. Systemy pozycyjne – zapis liczby ułamkowej n −1 . ∑c p i i i=0 i i i=− m 4 x = c4 c3 c 2 c1c0 = ∑c p x = cn −1 ... c2 c1c0 c −1c − 2 ... c − m = •Część ułamkowa liczby — m pozycji. •Część całkowita liczby — n pozycji. p — podstawa systemu pozycyjnego. Do zapisu liczby służą cyfry ci (których jest p) ustawiane na kolejnych pozycjach.Pozycje numerujemy od 0 zaczynając od strony prawej zapisu. •Wartość liczby obliczamy sumując iloczyny cyfr przez wagi ich pozycji. Każda pozycja posiada swoją wagę równą pi . Wartość liczby obliczamy sumująć iloczyny cyfr przez wagi ich pozycji. System dwójkowy (binarny) System dziesiętny Gottfried Leibnitz, XVIIw. Cyfry: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Cyfry: 0, 1. Przykład: Przykład: 55.8125 = 5*101+5*100+8*10-1+1*10-2+2*10-3+5*10-4 110111.11012 = 1*25 + 1*24 + 0*23 + 1*22 + 1*21 + 1*20 . + 1*2-1 + 1*2-2 + 0*2-3 + 1*2-4 •System ten jest wygodny dla człowieka, ale nie dla maszyny. •System ten jest wygodny maszyny. •Reprezentacja cyfry dziesiętnej cyfra zajmuje cztery bity pamięci komputera. •n-cyfrowa liczba binarna bez znaku zajmuje n bitów w •W ten sposób marnujemy pamięć — niektóre kombinacje (np. 1111) są niewykorzystane. Konwersja kodu dziesiętnego na dwójkowy 55.8125 Część ułamkową liczby Część całkowitą liczby dzielimy sukcesywnie przez mnożymy sukcesywnie przez 2 i bierzemy część całkowitą 2 i bierzemy reszty •Reprezentacja cyfry binarnej zajmuje dokładnie jeden bit. pamięci komputera. 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! 0.1(10)=? 1 0 2 55 27 1 1 8125 1 625 0 4 13 6 3 1 1 0 1 1 1 25 0 5 1 0 1 6 55(10)=110111(2) 0 8 1 2 0 4 0 8 0.8125(10)=0.1101(2) 55.8125(10)=110111.1101(2) 0.1(10)=0.000110011...(2)= 0.0(0011) 1 6 1 2 ... ... System szesnastkowy •Cyfry: 0, 1, 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 (10) (2) Cyfra (10) (2) 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). 00110111 0 0 0 8 8 1000 1 1 1 9 9 1001 2 2 10 A 10 1010 moduł liczby (7 bitów). znak (najbardziej znaczący bit) 3 3 11 B 11 1011 Liczba nieujemna 4 4 100 C 12 1100 jest kodowana jako: znak 0 i kod binarny modułu tej liczby. 5 5 101 D 13 1101 np. liczba 55 w przykładzie powyżej. 6 7 6 110 7 111 E F 14 1110 15 1111 Przykład: 37.D = 3*161 + 7*160 + D*16-1 Liczba ujemna Kod uzupełnień do 1 (U1) jest kodowana jako: znak 1 i kod binarny modułu tej liczby. Liczba ujemna x (analogicznie przeciwna) jest kodowana na jeden z dwóch (równoważnych) sposobów: Liczba -55 10110111 negujemy (bitowo) kod binarny modułu x bo 0110111(2) =55(10) =|-55| albo bierzemy kod binarny liczby 2n -1 +x. + Sposób wygodny dla człowieka. – Przy operacjach arytmetycznych trzeba porównać znaki. – Reprezentacja liczby 0: 00000000 oraz 10000000 (redundancja). Zakres liczb: [-2n-1 + 1, 2n-1 - 1] (2n - 1 liczb). Sposób 2: liczba -55 Sposób 1: liczba -55 1) Kod binarny modułu (=55): 1) Kod binarny liczby 00110111 28 -1 -55 =256 -56 =200: 2) Negacja bitowa: 11001000 11001000 – Sposób mało wygodny dla człowieka. + Łatwe operacje arytmetyczne. – Reprezentacja liczby 0: 00000000 oraz 11111111. Zakres liczb: [-2n-1 + 1, 2n-1 - 1] (2n - 1 liczb). Zasady dodawania Zasady dodawania 1 Liczby zapisane w kodzie U1 dodajemy zgodnie z zasadami dodawania dwójkowego, ale 1 Liczby zapisane w kodzie U1 dodajemy zgodnie z zasadami dodawania dwójkowego, ale 2 jeżeli wystąpi przeniesienie poza bit znaku, to do wyniku 2 jeżeli wystąpi przeniesienie poza bit znaku, to do wyniku należy dodać 1. należy dodać 1. Z przeniesieniem Bez przeniesienia 1111 0 1 0 0 1 1 0 1 (77) + 0 0 1 0 1 0 1 1 (43) 0 1 1 1 1 0 0 0 (120) 1 1 1 0 1 1 0 0 1 0 (-77) + 0 0 1 0 1 0 1 1 (43) 1 1 0 1 1 1 0 1 (-34) 11 111 0 1 0 0 1 1 0 1 (77) + 1 1 0 1 0 1 0 0 (-43) 1111 1 0 1 1 0 0 1 0 (-77) + 1 1 0 1 0 1 0 0 (-43) 00100001 10000110 +00000001 +00000001 0 0 1 0 0 0 1 0 (34) 1 0 0 0 0 1 1 1 (-120) 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 1; •bierzemy kod binarny liczby 2n +x. Sposób 1: liczba -55 Sposób 2: liczba -55 1) Kod binarny modułu (=55): 00110111 1) Kod binarny liczby 2) Negacja bitowa: 28 -55 =256 -55 =201: 11001000 3) Dodanie 1: 11001001 11001001 – Sposób mało wygodny dla człowieka. + Łatwe operacje arytmetyczne. – Jedna reprezentacja liczby 0: 00000000 Zakres liczb: [-2n-1 , 2n-1 -1] (2n liczb). 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. Dodawanie w kodzie U2 Dodawanie w kodzie U2 odbywa się zgodnie z zasadami dodawania dwójkowego 1 11 11 1 0 1 1 0 0 1 1 (-77) 111 + 0 0 1 0 1 0 1 1 (43) + 1 1 0 1 0 1 0 1 (-43) 1 1 0 1 1 1 1 0 (-34) 0 0 1 0 0 0 1 0 (34) 1111 111 1 0 1 1 0 0 1 1 (-77) + 1 1 0 1 0 1 0 1 (-43) 1 0 0 0 1 0 0 0 (-120) Liczby ułamkowe stałoprzecinkowe Liczba stałopozycyjna (n +m)-bitowa 00110111 posiada n bitów przeznaczonych na część całkowitą oraz m bitów przeznaczonych na kodowanie części ułamkowej. Liczba 9 +11 = 20 1 n −1 cn −1...c3c2c1c0 .c−1c−2 ...c−m = 11 1 0 0 1 (9) 1 0 1 1 (11) 1 0 1 0 0 (4) bit nadmiaru ustawiony na 1, przeniesienie. 1 0 1 0 0 1 1 0 1 (77) ∑c p i i i =− m Założenie: liczba bez znaku. Wartość największa: 2n-1 + 1 – 2-m = 2n – 2-m Wartość najmniejsza: 0+ 2-m = 2-m Liczby ułamkowe stałoprzecinkowe •Rozkład reprezentowanych wartości: równomierny. Liczby zmiennoprzecinkowe — przykłady •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. W wielu zagadnieniach zapis dużych lub bardzo małych liczb w normalnej notacji pozycyjnej jest niewygodny, gdyż wymaga sporej ilości cyfr. błąd bezwzględny δe < 2-m Dlatego liczby takie zapisuje się w bardziej wygodny sposób: Reprezentacja liczby 0.1 za pomocą pięciu bitów ułamkowych me = 9.109 x 10-31 kg 0.110 ≅0.000112 =3/32 =0.0937510 G = 6.67 x 10-11m3kg-1s-2 δe =|0.1-0.09375|=0.00625 =1/160 (błąd bezwzględny) NA = 6.022 x 1023mol-1 δe /0.1 =0.0625 =6:25%(błąd względny) Liczby zmiennoprzecinkowe (floating-point numbers) Liczba zmiennoprzecinkowa x =(-1)s · m · pc s — znak liczby, Normalizacja liczby zmiennoprzecinkowej Położenie przecinka w liczbie zmiennoprzecinkowej nie jest ustalone. 273.16 = 2.7316 x 102 = 0.27316 x 103 = 27316 x 10-2 Znormalizowana liczba zmiennoprzecinkowa to taka liczba, której mantysa spełnia zależność: m — mantysa, p — podstawa systemu, c — cecha. 1≤ |m|<p W systemie dwójkowym znormalizowana liczba zmiennoprzecinkowa ma zawsze część całkowitą równą ±1. me = 9.109 x 10-31 kg G = 6.67 x 10-11 m3kg-1s-2 NA = 6.022 x 1023 mol-1 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 ·2xxx Możliwe wartości: 0.00 0.01 0.10 0.11 1.00 1.01 1.10 1.11 000 001 010 011 100 101 110 111 0 0 0 0 0 0 0 0 0.25 0.5 1 2 4 8 16 32 0.5 0.75 1 1.25 1.5 1.75 1 1.5 2 2.5 3 3.5 2 3 4 5 6 7 4 6 8 10 12 14 8 12 16 20 24 28 16 24 32 40 48 56 32 48 64 80 96 112 64 96 128 160 192 224 Brak wielu liczb! (np. 9, 11, 13, 15, . . . ) Standard IEEE 754 Precyzja liczb zmiennoprzecinkowych Próba zakodowania liczby 9 9 =9 · 20 = 4.5 · 21 =2.25 · 22 =1.125 · 23 =(1.001 · 2011)2 Ale mamy do dyspozycji tylko format: x:xx · 2xxx A zatem mantysa 1.001 zostanie obcięta do 1.00 i w ten sposób dostaniemy liczbę: (1.00 · 2011)2 =810 Mamy tu do czynienia z błędem zaokrąglenia. Wniosek: liczba 9 wymaga większej precyzji. 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 80 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 sign(bit znaku): 0 — liczba dodatnia, 1 — liczba ujemna, exponent (cecha): kod z nadmiarem (BIAS = 2e-1 - 1), fraction (mantysa): liczba stałoprzecinkowa, kod U1, pozbawiona najbardziej znaczącego bitu reprezentującego część całkowitą — bit ten nie jest przechowywany. Typ zera liczby nieznormalizowane liczby znormalizowane nieskończoności NaN (nieokreślone) Cecha 0 0 od 1 do 2e-1 2e-1 2e-1 •bit znaku: 0 — liczba dodatnia, 1 — liczba ujemna, •cecha: (BIAS =127), zakres: -126 ÷127, •mantysa: m =1.fraction •Znormalizowane liczby o najmniejszym module: Mantysa 0 ≠0 dowolna 0 ≠0 ±2-126 ≈±1.175494351 ·10-38 •Liczby o największym module: ±((1 - (1/2)24)2128)≈± 3.4028235 ·1038 Liczby podwójnej precyzji 63 52 •bit znaku: 0 — liczba dodatnia, 1 — liczba ujemna, •cecha: (BIAS =1023), zakres: -1022 ÷1023, •mantysa: m =1.fraction •Znormalizowane liczby o najmniejszym module: ±2-1022 ≈±2.2250738585072020 ·10-308 •Liczby o największym module: ±(1+ (1 – 2-52)))21023≈± 1.7976931348623157 ·10308 23 0 0