Wstęp doinformatyki Systemy liczbowe i arytmetyka komputerów Dr inż. Ignacy Pardyka kademia Świętokrzyska Kielce, System dziesiętny Liczba: 5= *+5*+* - każdą z cyfr mnożymy przez tzw. wagę pozycji, która jest kolejną potęgą liczby będącej podstawą systemu liczenia: 5 () =* + 5* + * - liczbę dziesiętną można zapisać jako: L () =a n * n + a n- * n- + a n- * n-...+... a * + a * + a * Współczynniki a nmogą mieć wartość:,,,,,5,6,7,8,9 Slajd Slajd Inne systemy System dwójkowy W technice komputerowej praktyczne zastosowanie znalazły systemy: o podstawie - tzw. system binarny (dwójkowy) używany do przechowywania i przetwarzania danych przez układy elektroniczne komputera o podstawie 6 - tzw. system heksadecymalny (szesnastkowy), używany głównie do prezentacji niektórych danych m.in. adresów komórek pamięci Liczbę w systemie o podstawie możemy przedstawić jako: L () =a n * n + a n- * n- + a n- * n-... +... a * + + a * + a * współczynniki a n mogą przybierać tylko dwie wartości: lub Slajd Slajd System szesnastkowy Konwersja do Liczbę w systemie szesnastkowym (o podstawie 6) możemy przedstawić jako: L (6) =a n *6 n + a n- *6 n- + a n- *6 n-... +... +a *6 + a *6 + a *6 współczynniki a n mogą być liczbami:,,,,,5,6,7,8,9,,,,,,5 Cyfry od do 5 zastąpiono w zapisie literami: -, - B, C, D, E, 5 F 69 7 8 Najmłodszy bit Najstarszy bit Podziel liczbę dziesiętną przez z resztą (reszta może być albo). Zapisz resztę na najmłodszej pozycji. Wynik dzielenia podziel przez z resztą. Resztę zapisz na starszej pozycji. itd. aż do otrzymania najstarszego bitu. Np. 69 () = () Slajd 5 Slajd 6
Konwersja do Konwersja do 6 Liczba dziesiętna 69 to binarnie: lgorytm zamiany liczby binarnej na heksadecymalną: dzielimy liczbę binarną na tzw. kęsy (tetrady) o długości bitów (licząc od ostatniej pozycji) czyli: Dla każdej tetrady znajdujemy wartość dziesiętną i zapisujemy ją w postaci heksadecymalnej binarnie dziesiętnie 5 heksadecymalnie 5 tak więc: 5 (6) =*6 + 5*6 =6+5=69 Slajd 7 Slajd 8 SCII SCII Znak B C K L ź + Kod dzies. 65 66 67 75 76 7 79 88 Kod binarny Znak a b c k l Ż Ă - Kod dzies. 97 98 99 7 8 89 98 96 Kod binarny NUL SOH STX ETX EOT 5 ENQ 6 CK 7 BEL 8 BS 9 HT NL VT NP CR SO 5 SI 6 DLE 7 DC 8 DC 9 DC DC NK SYN ETB CN 5 EM 6 SUB 7 ESC 8 FS 9 GS RS US SP! " 5 # 6 $ 7 % 8 & 9 ' ( ) * +, 5-6. 7 / 8 9 5 5 5 5 5 5 6 55 7 56 8 57 9 58 : 59 ; 6 < 6 = 6 > 6? 6 @ 65 66 B 67 C 68 D 69 E 7 F 7 G 7 H 7 I 7 J 75 K 76 L 77 M 78 N 79 O 8 P 8 Q 8 R 8 S 8 T 85 U 86 V 87 W 88 X 89 Y 9 Z 9 [ 9 \ 9 ] 9 ^ 95 _ 96 ` 97 a 98 b 99 c d e f g h 5 i 6 j 7 k 8 l 9 m n o p q r 5 s 6 t 7 u 8 v 9 w x y z { 5 } 6 ~ 7 DEL Slajd 9 Slajd UNICODE Jednostki informacji 56 znaków alfanumerycznych jakie można zakodować za pomocą rozszerzonego kodu SCII nie dawało możliwości zakodowania znaków diakrytycznych wielu języków, w tym japońskiego, arabskiego, hebrajskiego itd. UNICODE kod o długości 6 bitów dla każdego znaku, daje możliwość zakodowania 6 czyli 6556 znaków kbit [Kb]= b= bity Mbit[Mb]= Kb=8576 bity Gbit = Mb = bitów Tbit = Gb = bitów byte = 8 bitów kb = bajtów= B MB= KB=8576 B Slajd Slajd
Systemy liczbowe Liczby dziesiętne Podstawa ( cyfr) = ( * )+(* )+(* )+(* ) Liczby dwójkowe (binarne) Podstawa (cyfry:,) cyfrowa (bitowa) liczba d d d 9 d d d => d * +d * + +d * +d * () = ( ) Liczby szesnastkowe (heksadecymalne) Podstawa6(cyfry:,,,,,5,6,7,8,9,,B,C,D,E,F) d 7 d 6 d 5 d d d d d => d 7 *6 7 +d 6 * 6 + +d *6 +d *6 () = ( C D) 6 => C*6 +*6 + D*6 Reprezentacja danych Za pomocą bitów możemy reprezentować: Znaki 6 liter => 5 bitów Wielkie i małe litery + znaki interpunkc. => 7 bitów (na 8) Inne języki świata => 6 bitów (unicode) Liczby bez znaku - unsigned numbers (,,, n- ) Wartości logiczne ->False,=>True Kolory dresy / rozkazy le n bitów może reprezentować jedynie n rzeczy Slajd Slajd ZM liczby ujemne ZM - problemy Najstarszy bit bit znaku => +, => - Pozostałe bity moduł Znak-moduł (sign and magnitude) MIPSużywa -bit liczb całkowitych (6-bit immediates/displacements) + ten to: - ten to:. Złożone układy arytmetyczne Konieczność badania znaku. Dwie reprezentacje zera x = + ten x8 = - ten W programie będzie więc(+ ==-) Reprezentacja odrzucona Slajd 5 Slajd 6 U (one s complement) Liczba ujemna po zanegowaniu bitów Przykład: 7 = -7 = Liczby dodatnie mają wiodące zera,liczby ujemne wiodące jedynki....... Podwójna reprezentacja zera x =+ ten xffffffff =- ten U (two s complement) Liczby dodatnie najstarszy bit Liczba ujemna: zanegowanie bitów + JEDEN Przykład = - = + = 7 = -7 = + = Liczby dodatnie: najstarszy bit Liczby ujemne: najstarszy bit Slajd 7 Slajd 8
U U - - - - -5 5 6-6 -7 7-8 n- nieujemnych n- ujemnych Jednozero n- - dodatnich... two = ten... two = ten... two = ten...... two =,7,8,65 ten... two =,7,8,66 ten... two =,7,8,67 ten... two =,7,8,68 ten... two =,7,8,67 ten... two =,7,8,66 ten...... two = ten... two = ten... two = ten -8-6 - - 6 8 Slajd 9 Slajd U Negacja U Można traktować jako rozwinięcie potęgi ze znakiem: d x(- ) +d x +... + d x +d x +d x Przykład two = x- +x +x 9 +... +x +x +x =- + + 9 +... + ++ = -,7,8,68 ten +,7,8,6 ten =- ten UWG: należy określić długość liczby: tutaj bity Inwersjakażdego na i każdej na, do rezultatu dodać Suma liczby i jej inwersji (one s complement) musi być... two =- ten Niech x oznacza inwersję x Wtedy x + x = - x+x += x +=-x Np: - na + na - x: two x : two +: two () : two +: two Slajd Slajd Powielanie znaku Porównanie kodów Konwersja liczby U zapisanej na n bitach do postaci zapisanej na większej liczbie bitów Powielenie bitu znaku (sign bit) na starsze pozycje U dodatnie, powiel Uujemne,powiel Przykład: 6-bit - ten na -bit: two two N decimal 5 6 7 8 9 5 7 8 (+N) NKB N (-N) ZM N (-N) U N (-N) U Slajd Slajd
LU Dodawanie I- instruction 5 ten +6 ten (5 ten ) + (6 ten ) = ( ten )...() () () () () Carries -bit memory address +......... () () () () Slajd 5 Slajd 6 Odejmowanie Mnożenie przez : Bit ing ten -5 ten ( ten ) - ( 5 ten ) = ( 7 ten ) W lewo (x << ) mnoży przez: = = 6 = - = -6 ten -5 ten = ten +(-5 ten ) ( ten ) + ( -5 ten ) Dla liczb całkowitych bez znaku a także dla U (uzupełnienie dwójowe, complement). = ( 7 ten ) Slajd 7 Slajd 8 Dzielenie przez : Bit ing Mnożenie liczb całkowitych Logical w prawo (x >> ) dzieli przez (liczby bez znaku): = 7 = 9 = = Zaokrągla w dół! rytmetycznie w prawo (x >> ) dzieli (dla liczb w kodzie U) = 7 = -7 = = - Zaokrągla w dół! 5 ten x6 ten (5 ten ) x ( 6 ten ) = ( ten ) M RL RH = W kodzie U gdy mnożnik ujemny potrzebna korekta wyniku: odjąć Mod starszej tetrady. Slajd 9 Slajd 5
Mnożenie: sprzęt Mnożenie: przykład M Mnożna Mnożna () x Mnożnik () M... M Iloczyn () kierunek przesuwania (w prawo) Układ sterowania SHF RH RL LU C C -bit LU right dd Control... Q... Q Mnożnik C Q M Initial values dd dd dd Slajd Slajd Mnożnik ujemny: przykład x (9) x () x x (7) Unsigned Signed -5 - - (-7) x () (-7) x = (-7) (-7) x = (-) (-) Prosty algorytm mnożenia da wynik nieporawny (7)! Slajd lgorytm Bootha: mnożnik > Mnożnik: (blok k jedynek pomiędzy zerami) Mx() =Mx( + + + ) =Mx(6+8++) 5 =Mx uwaga: n + n- +...+ n-k = n+ n-k =>Mx()=Mx( 5 - ) lgorytm: Odejmij M gdy rozpoczyna się blok jedynek (-) Dodaj M gdy blok się skończył (-) Zastosuj metodę dla każdego bloku jedynek Slajd lgorytm Bootha: mnożnik < Reprezentacja liczb ujemnych U (X): {x n- x n-...x x } X=- n- +x n- * n- +x n- * n-...x * Prawostronne zero jest na pozycji k Reprezentacja X = { X k- X } X=- n- + n-... k+ +x k- * k-...x * - n- + n- + + k+ =- k+ X=- k+ +x k- * k-...x * lgorytm Bootha - schemat STRT =, Q - M Mnożna Q Mnożnik Count n Q,Q - = = - M + M = rithmetic shift right:, Q, Q - Count Count - (-) początek bloku, więc odejmij M Count =? END Slajd 5 Slajd 6 6
Przykład (/) Przykłady (/) początkowo 7 () x () Q Q - M =- M =+ M (7) x () - - - () (-7) x () - - - (-) (7) x (-) - - - (-) (-7) x (-) - - - () Slajd 7 Slajd 8 Dzielenie liczb całkowitych Dzielenie bez znaku liczby całkowite binarne bez znaku dzielnik (divisor) reszty cząstkowe iloraz (quotient) dzielna (dividend) reszta (remainder) STRT Q M dzielnik Q dzielna Count n, left:, Q - M <? Count Count - Q + M dzielna = iloraz * dzielnik + reszta Count =? END Iloraz w Q Reszta w Slajd 9 Slajd Dzielenie: sprzęt Control dd SLL M... M -bit LU Dzielnik write write... Q... Q Dzielna 7/: Dzielenie: przykład Q M = Wartości początkowe =-M =+M =-M =+M =-M Q = =-M =+M Slajd Slajd 7
Dzielenie ze znakiem Rozwiązanie najprostsze: Negować iloraz jeśli znaki dzielnej i dzielnika różne Reszta i dzielna muszą być tego samego znaku reszta = (dzielna iloraz * dzielnik) (+7) / (+): Q = ; R = (-7) / (+): Q = -; R = - (+7) / (-): Q = -; R = (-7) / (-): Q = ; R = - Dzielenie ze znakiem: schemat STRT + M, Q dzielna M dzielnik, Count n left:, Q S, Count Count- M =? S=? - M = and Q Q=? Slajd Count =? END Iloraz w Q Reszta w Slajd Q Przykłady (/) M = Wartości początkowe Q = Q M = Wartości początkowe dd dd dd Q = dd Przykłady (/) Wart. początkowe (7) / () (7) / (-) (-7) / () (-7) / (-) Slajd 6 Slajd 5 Q M = Wart. początkowe dd dd dd Q = dd Q M = Q = Liczby zmiennoprzecinkowe FP. 5 FP standard: IEEE 75. 5 = mantysa wykładnik mantysa znak & moduł: ZM (pominięta wiodąca ) Własności: Dłuższa mantysa większa dokładność. Dłuższy wykładnik większy zakres. = xb8 wykładnik, reprezentacja polaryzowana: BIS BIS = 7 = -7 = - = =... = 8 Slajd 7 Slajd 8 8
FP standard: IEEE 75 Formaty: Pojedyncza precyzja (single-precision) mantysa: bity, wykładnik: 8 bitów. zakres dodatnich:.7595-8.87 +8 Podwójna precyzja (double-precision) mantysa: 5 bity, wykładnik: bitów. zakres:.5785857-8.797698657 +8 Single Precision Double Precision Reprezentacja FP IEEE 75 Znormalizowana notacja: +.xxxx two * yyyytwo S wykładnik bit 8bits bits S wykładnik 9 bit bits bits mantysa (cd.) bits mantysa (significand) mantysa (significand) Exponent: BIS (polaryzowany) Mantysa: ZM Bias 7 (SP) (DP) Slajd 9 Slajd 5 Konwersja do Konwersjado Znak: => dodatnia Wykładnik: two = ten Korekta BIS: - 7 = - Mantysa: =+x - +x - +x - +x - +x -5 +... =+ - + - + -5 + -7 + -9 + - + -5 + -7 + - =. +.6665 -.. x.66666666 -.....66666666 x. Mantysa: Znak: ujemny => Wykładnik: + 7 = 8 ten = two. x.6666666 => -... x Wartość:.6665* - ~.986* -7 Slajd 5 Slajd 5 Negative Overflow NaN Wartości szczególne FP Negative Underflow Expressible Negative Numbers Positive Underflow Expressible Positive Numbers Positive Overflow -(- - )* 8 -.5* -7.5* -7 (- - )* 8 Wartość +/- Liczba nieznormaliz. +/- infinity Wykładnik Mantysa nzero nzero Slajd 5 De-normalizacja Problem: luka reprezentacji FP wokół Liczba min. a =. * -6 = -6 Liczba min. > a: b =... * -6 = -6 + -9 a-= -6 b b-a= -9 luka! - + Rozwiązanie: a Denormalizacja liczb: tj. bez wiodącej Liczba min. a = -9 Liczba min. > a: b = -8 a-= -9 b-a= -9 - + Slajd 5 9
Zaokrąglanie Gdy konwersja typów Double single precision integer Zaokrąglanie do + Zawsze w górę:. => ; -. => - Zaokrąglanie do - Zawsze w dół:.999 => ; -.999 => - Odrzucanie (truncate) Zerowanie najmłodszych bitów Zaokrąglanie do najbliższej liczby.5 => ;.5 => Błędy FP Czy FP przemienne względem dodawania i odejmowania? x=.5x 8,y=.5x 8, and z =. x + (y + z) =.5x 8 + (.5x 8 +.) =.5x 8 + (.5x 8 ) =. (x + y) + z = (.5x 8 +.5x 8 ) +. = (.) +. =. Operacje: +, - nie są przemienne! Dlaczego? FP aproksymuje rzeczywisty wynik.5x 8 >>. więc.5x 8 +.w reprezentacji FP to dalej.5x 8 Slajd 55 Slajd 56 FP dodawanie / odejmowanie Trudniejsze niż liczb całkowitych Nie można beztrosko dodawać mantys lgorytm De-normalizować aby wykładniki były równe Dodać (odjąć) mantysy Zachować wspólny wykładnik Znormalizować wynik (zmieniając wykładnik) Uwaga: odejmowanie, gdy różne znaki mantys. lgorytm:.. Przesunąć mniejszą z liczb w prawo aż do zrównania wykładników. Dodać mantysy. Znormalizować rezultat. Zaokrąglić mantysę 5. Znormalizować powtórnie FP operacje: + - Np. ( cyfrowa mantysa): 9. - + 7.656 - = 9. - +.7656 - = 9.9996 - =. - =. Dodatkowa cyfra do zaokrąglenia. Slajd 57 Slajd 58 FP mnożenie FP dzielenie lgorytm: lgorytm:. Pomnożyć mantysy (mnożenie liczb bez znaku & ustalenie znaku wyniku). Dodać wykładniki (dodawanie liczb całkowitych polaryzowanych - BIS). rmalizować rezultat, sprawdzić over/underflow. Zaokrąglić mantysę 5. rmalizować rezultat powtórnie, sprawdzić over/underflow Np. ( cyfrowa mantysa):.5 - -. +6 = -.6 + = -.6 + = -. +. Podziel mantysy (dzielenie liczb całkowitych bez znaku & ustalenie znaku). Odejmij wykładniki (odejmowanie liczb całkowitych polaryzowanych BIS). rmalizować rezultat, sprawdzić over/underflow. Zaokrąglić mantysę 5. rmalizować wynik powtórnie, sprawdzając over/underflow Np. ( cyfrowa mantysa):. - / -. +6 = -.9995-9 = -9.9995 - = -. - = -. -9 Slajd 59 Slajd 6
FP sprzęt MIPS Slajd 6