Arytmetyka komputerowa — istnieje 2n różnych liczb n
Transkrypt
Arytmetyka komputerowa — istnieje 2n różnych liczb n
Arytmetyka komputerowa Wszelkie liczby zapisuje się przy użyciu bitów czyli cyfr binarnych: 0 i 1. Ile różnych liczb można zapisać używajac n bitów? n 1 2 3 4 ··· n ··· liczby n-bitowe 0 1 00 01 10 11 000 001 010 011 100 101 110 111 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 ··· ile ich jest? 2 4 8 ··· 16 ··· 2n ··· — istnieje 2n różnych liczb n-bitowych. Wykład 8. ARYTMETYKA KOMPUTEROWA, str. 2 Arytmetyka komputerowa W jaki sposób użyć tych n bitów do reprezentacji liczb całkowitych — • żeby zapisać zarówno liczby dodatnie jak ujemne, • żeby każdy układ bitów odpowiadał dokładnie jednej liczbie, • żeby łatwo wykonywało się podstawowe operacje arytmetyczne. Zapis stałopozycyjny liczb: ciąg bitów bn−1 . . . b1 b0 reprezentuje liczbę n−2 X i=0 ! bi · 2i − bn−1 · 2n−1 = b0 · 20 + b1 · 21 + . . . + bn−2 · 2n−2 − bn−1 · 2n−1 Arytmetyka komputerowa — zapis stałopozycyjny Załóżmy, że liczby są 3-bitowe. Wtedy: 000 001 010 011 100 101 110 111 = = = = = = = = 0+0·2−0·4 1+0·2−0·4 0+1·2−0·4 1+1·2−0·4 0+0·2−1·4 1+0·2−1·4 0+1·2−1·4 1+1·2−1·4 = = = = = = = = 0 1 2 3 −4 −3 −2 −1 Wykład 8. ARYTMETYKA KOMPUTEROWA, str. 4 Arytmetyka reszt (arytmetyka modulo n) ......................... ............. 3 ...................... ........ ...... . . . . . ..... .. .... 2...... .4 . . . . ... . ... ... ... .. ... ... ... ... .... .. .5. 1 .. .. ... ... ... . ... .. ... . ... ... .... ... . ..... . . 6........ ....0 ......... ....... . . . . . . . ................. . ......7 ....................... 8 Sklejamy liczby całkowite: n − 1 = −1 n=0 n+1=1 ··· 9 Inaczej: każdą liczbę m zastępujemy przez m % n — resztę z dzielenia m przez n Arytmetyka liczb całkowitych na komputerze jest arytmetyką reszt (patrz niżej). Arytmetyka reszt (arytmetyka modulo n) Niech n 2. DEFINICJA: (relacja modulo n) M Dwie liczby całkowite p i q są równe modulo n, jeśli równe są reszty z ich dzielenia przez n: def p ≡n q ⇐⇒ p%n = q%n Fakt: M p ≡n q ⇐⇒ p − q jest podzielne przez n. Fakt: M Relacja ≡n jest relacją równoważności na Z; t.zn. jest • zwrotna: p ≡n p • symetryczna: jeśli p ≡n q to q ≡n p • przechodnia: jeśli p ≡n q i q ≡n r to p ≡n r Relacja równoważności pozwala podzielić zbiór Z na klasy abstrakcji: do każdej klasy wchodzą liczby o tej samej reszcie z dzielenia przez n. Wykład 8. ARYTMETYKA KOMPUTEROWA, str. 6 Arytmetyka reszt (arytmetyka modulo n) Sklejenie „modulo” jest rozdzielne względem dodawania, odejmowania i mnożenia liczb całkowitych: • (m + k) % n = (m % n + k % n) % n (13 + 4) % 8 = (13 % 8 + 4 % 8) % 8 = (5 + 4) % 8 = 9 % 8 = 1 • (m − k) % n = (m % n − k % n) % n (13 − 26) % 8 = (13 % 8 − 26 % 8) % 8 = (5 − 2) % 8 = 3 % 8 = 3 • (m · k) % n = (m % n · k % n) % n (13 · 26) % 8 = (13 % 8 · 26 % 8) % 8 = (5 · 2) % 8 = 10 % 8 = 2 Sklejenie „modulo” jest kongruencją względem tych działań. ....................... ................3 .......... ........... . . . ....... . . . ..... .... . . . . . −4 2....... . . . . . ... ... .... ... .. ... ... ... ... ... .. ... −3 1 ... ... . . ... ... .. . ... . ... ... .... . . .... .... ..... −2 ...0. . ....... . . . ..... .......... .................................................... −1 dodatnie ujemne Arytmetyka komputerowa arytmetyka 3-bitowa, czyli modulo 23 = 8 Arytmetyka liczb całkowitych w języku C w moim komputerze jest czterobajtowa; to znaczy modulo (28 )4 = 28·4 = 232 . Dlatego wg niego 65536 · 65535 = −65536 bo 65536 = 216 (216 · (216 − 1)) % 232 = (232 − 216 ) % 232 = −216 % 232 Wykład 8. ARYTMETYKA KOMPUTEROWA, str. 8 Arytmetyka komputerowa — działania Ist. 10 rodz. ludzi: ci, co rozumieją liczby binarne i ci, co nie rozumieją. Binarne dodawanie stałopozycyjne 41 + 27 = ? 41 = 25 + 23 + 20 27 = 24 + 23 + 21 + 20 przeniesienie: 11011 składnik 1: 41 czyli: składnik 2: 27 czyli: suma: 101001 + 11011 1000100 czyli 26 + 22 = 68 Arytmetyka komputerowa — działania Ist. 10 rodz. ludzi: ci, co rozumieją liczby binarne i ci, co nie rozumieją. Binarne dodawanie stałopozycyjne 41 + (−27) = ? zakładamy, że na liczbę całkowitą przypada 8 bitów 41 = 25 + 23 + 20 −27 = 256 − 27 = 229 = 27 + 26 + 25 + 22 + 20 przeniesienie: 1100001 składnik 1: 41 czyli: składnik 2: -27 czyli: suma: 101001 +11100101 00001110 czyli 23 + 22 + 21 = 14 Wykład 8. ARYTMETYKA KOMPUTEROWA, str. 10 Arytmetyka komputerowa — działania Binarne mnożenie stałopozycyjne 41 · 27 = ? zakładamy, że na liczbę całkowitą przypada 8 bitów 41 = 25 + 23 + 20 27 = 24 + 23 + 21 + 20 przeniesienie: 1111000 czynnik 1: 41 czyli: czynnik 2: 27 czyli: suma: 101001 × 11011 101001 101001 000000 01001 +1001 01010011 czyli 26 + 24 + 21 + 20 = 83 Arytmetyka komputerowa — zapis zmiennopozycyjny zapis zapis zapis komputerowy tradycyjny przyrodniczy stałopozycyjny 5.041E9 5.041 · 109 5 041 000 000 5.041E-6 5.041 · 10−6 0.000 005 041 Liczby bardzo duże lub bardzo małe zapisuje się w postaci znak·mantysa·10cecha gdzie 1 ¬ mantysa < 10 i cecha ∈ Z (liczba całkowita) Wewnętrzna komputerowa reprezentacja różni się tym, że podstawą nie jest 10 tylko 2. Wykład 8. ARYTMETYKA KOMPUTEROWA, str. 12 Arytmetyka komputerowa — zapis zmiennopozycyjny 1. Przedstawić liczbę rzeczywistą x w postaci x = z · m · 2c , gdzie • znak z jest albo −1 albo 1, • mantysa m jest liczbą rzeczywistą taką że: ( ] •| m = 0 lub 1 ¬ m < 2, −2 −1 0 • cecha c jest liczbą całkowitą. [ 1 ) 2 O jednoznaczności takiego przedstawienia — patrz dalej. 2. Cechę zapisujemy binarnie w zwykły sposób (to jest liczba całkowita). 3. Mantysę zapisujemy podobnie, za podstawę biorąc jednak m0 m1 m2 . . . reprezentuje liczbę +∞ X mi i=0 2i = m0 m1 m2 + 1 + 2 + ... 0 2 2 2 1 2 zamiast 2: ciąg każde mi to albo 0 albo 1 (m0 = 1 zawsze). 4. Ucinamy nieskończony ciąg m0 m1 m2 . . . zależnie od liczby bitów przeznaczonych na mantysę liczby. Arytmetyka komputerowa — zapis zmiennopozycyjny Przykład: M Załóżmy, że poświęcamy: • na cechę: 8 bitów; • na mantysę: 7 bitów; • na znak liczby: 1 bit. Jak przedstawić liczbę 1 7 ? 1 2 4 8 1 = · 20 = · 2−1 = · 2−2 = · 2−3 7 7 7 7 7 ≈ 0 0 1 0 0 1 + + · 2−3 1+ + + + 2 4 8 16 32 64 znak cecha mantysa 0 11111101 1.001001 + −3 8/7 Wykład 8. ARYTMETYKA KOMPUTEROWA, str. 14 Arytmetyka komputerowa — zapis zmiennopozycyjny Przykład: M Załóżmy, że poświęcamy: • na cechę: 8 bitów; • na mantysę: 7 bitów; • na znak liczby: 1 bit. Liczba −20 31 : 61 0 61 4 61 = ·2 = ·2 3 3 48 ≈ 0 0 1 0 1 0 + + · 24 1+ + + + 2 4 8 16 32 64 znak cecha mantysa 1 00000100 1.010001 − 4 61/48 Arytmetyka komputerowa — zapis zmiennopozycyjny Przykład: M Załóżmy, że poświęcamy: • na cechę: 8 bitów; • na mantysę: 7 bitów; • na znak liczby: 1 bit. Jaką liczbę przedstawia poniższy układ bitów? znak cecha mantysa 1 01001000 1.101001 − 72 105/64 1 0 1 0 0 1 − 1+ + + + + + · 272 2 4 8 16 32 64 = − 64 + 32 + 8 + 1 72 105 72 ·2 = − · 2 = −105 · 266 64 64 ≈ −7.74763251096 · 1021 Wykład 8. ARYTMETYKA KOMPUTEROWA, str. 16 Arytmetyka komputerowa — zapis zmiennopozycyjny x = (−1)s · m · 2c Własności: • Jeśli cecha c ma k bitów, to −2k−1 ¬ c < 2k−1 , więc k−1 2−2 k−1 ¬ 2c < 22 1 ¬ 2c < 2128 ≈ 3.4028237 · 1038 ). (np. dla k = 8: 2128 Im więcej bitów ma cecha, tym większy zakres przedstawianych liczb. • Jeśli mantysa m ma n bitów, to liczby można przedstawić z dokład1 nością do n−1 · 2c 2 (np. dla n = 7 dokładność do ok. 1.5625 · 10−2 · 2c ). Im więcej bitów ma mantysa, tym większa dokładność (mniejsze „ziarno”) przedstawianych liczb. Dokładność jest większa dla liczb bliskich zeru. Arytmetyka komputerowa — zapis zmiennopozycyjny Im więcej bitów ma cecha, tym większy zakres przedstawianych liczb. Im więcej bitów ma mantysa, tym większa dokładność (mniejsze „ziarno”) przedstawianych liczb. Jeśli przeznaczymy • 2 bity na cechę (wartości cechy: −2, −1, 0, 1) i • 3 bity na mantysę (wartości mantysy: 0, 44 , 54 , 64 , 74 ), to potrafimy przedstawić następujące liczby nieujemne: 0 c=0 }| c = −1 c = −2 z}|{ z 1 2 7 16 6 5 16 4 4 16 16 8 }| 5 8 6 8 { z 1 7 8 4 4 5 4 6 4 c=1 }| { z 2 7 4 4 2 5 2 { ×4 7 2 6 2 . . . + tyle samo po ujemnej stronie zera. Wykład 8. ARYTMETYKA KOMPUTEROWA, str. 18 Arytmetyka komputerowa — zapis zmiennopozycyjny TWIERDZENIE: (jednoznaczność zapisu zmiennopozycyjnego) M Załóżmy, że: 1. c1 , c2 ∈ Z (l. całkowite), m1 , m2 ∈ R (l. rzeczywiste), 2. 1 ¬ m1 < 2 i 1 ¬ m2 < 2, 3. m1 · 2c1 = m2 · 2c2 . Wtedy m1 = m2 i c1 = c2 . Dowód twierdzenia o jednoznaczności: Z ?? wynika m 1 c1 − c2 m1 · 2c1 ·2 = 1 = c m2 · 2 2 m2 Jeśli c1 = c2 , to 2c1 −c2 = 1 i m1 = m2 , koniec dowodu. Jeśli c1 < c2 , to c1 ¬ c2 − 1, to 2c1 −c2 ¬ 21 , to 1 ¬ Ale to niemożliwe, bo m1 < 2 i m2 1. m1 m2 · 12 , to m1 m2 2. Arytmetyka komputerowa — działania Binarne mnożenie zmiennopozycyjne (m1 · 2c1 ) · (m2 · 2c2 ) = (m1 · m2 ) · 2c1 +c2 Przykład: M 0.2125 · 972.8 = (1.7 · 2−3 ) · (1.9 · 29 ) = (1.7 · 1.9) · 26 = 3.23 · 26 (normalizacja wyniku) = 1.615 · 27 = 206.72 Wykład 8. ARYTMETYKA KOMPUTEROWA, str. 20 Arytmetyka komputerowa — działania Binarne dodawanie zmiennopozycyjne (m1 · 2c1 ) + (m2 · 2c2 ) = (m1 · 2c1 ) + ((m2 · 2c2 −c1 ) · 2c1 ) = (m1 + m2 · 2c2 −c1 ) · 2c1 Dodawanie wymaga „przeskalowania” jednego składnika; to jest skomplikowane i prowadzi do utraty precyzji. Przykład: M 972.8 + 0.2125 = 1.9 · 29 + 1.7 · 2−3 = 1.9 · 29 + (1.7 · 2−12 ) · 29 = 1.9 · 29 + 0.0004150390625 · 29 = (1.9 + 0.0004150390625) · 29 = 1.9004150390625 · 29 Arytmetyka komputerowa — działania Utrata precyzji przy dodawaniu Przykład: M Załóżmy, że poświęcamy na cechę: 8 bitów; na mantysę: 8 bitów. (1.5 · 2100 ) + (1.5 · 2−100 ) = (1.5 · 2100 ) + ((1.5 · 2−200 ) · 2100 ) = (1.5 + 1.5 · 2−200 ) · 2100 Ale 1.5 · 2−200 w mantysie to dwa bity przesunięte w prawo o 200 pozycji; a mantysa ma ich tylko 8; więc po tym przesunięciu wychodzi 0. Tak więc (1.5 · 2100 ) + (1.5 · 2−100 ) = 1.5 · 2100 chociaż 1.5 · 2−100 6= 0.