Principy počítačů I REPREZENTACE DAT Literatura D.Goldberg: What Every Computer Scientist Should Know About Floating-Point Arithmetic IA-32 Intel Architecture Software Developer s Manual (Vol. Basic Architecture) There are only types of people in the world: those who understand binary, and those who don't. Typy dat Literály Literály Čísla Instrukce logické hodnoty znaky grafické symboly nečíselná data Logické hodnoty Znaky možno reprezentovat jediným bitem x x x x x x x x x x x x x x problémy s adresováním reprezentace celou datovou jednotkou EBCDIC ASCII UNICODE problémy s velikostí
EBCDIC 256 závazných znaků x.. x3f... speciální (řídící) znaky x4.. xff... tisknutelné znaky Mnoho volných pozic Abeceda není v jednom bloku ASCII b6 b5 b3 b2 b b b4 NUL DLE space @ P ` p SOH DC! A Q a q STX DC2 " 2 B R b r ETX DC3 # 3 C S c s EOT DC4 $ 4 D T d t ENQ NAK % 5 E U e u ACK SYN & 6 F V f v BEL ETB ' 7 G W g w BS CAN ( 8 H X h x HT EM ) 9 I Y i y LF SUB * : J Z j z VT ESC + ; K [ k { FF FS, < L \ l CR GS - = M ] m } SO RS. > N n ~ SI US / O _ o DEL 'G' ASCII KOI8-čs PC standard EAST8 Latin x (Latin 2) Windows codepage (25) ISO/IEC 8859 (8859-2) UNICODE součást normy ISO/IEC 646- (993) znak reprezentován vícebytovou sekvencí diakritika možnost uživatelských symbolů problém se staršími programy pozor na konkrétní implementaci UNICODE podpora národních abeced Latin Greek Cyrillic Hebrew Hiragana, Katakana... a množství dalších návrhy rozšíření Grafické symboly reprezentace spolu se znaky jazyky pro popis grafických symbolů 2
Polyadické Číselné soustavy i= n i= m Číslo A = a z i i reprezentujeme uspořádanou (m+n)ticí koeficientů a i Soustava může mít jeden nebo více základů (radix mumber system) V soustavě s jedním základem z jsou hodnoty z i určeny jako z i =z i m=... celá čísla, m>... zlomková část Číselné soustavy Nepolyadické římské číslice 648 MDCXLVIII 23 MMIII 9 IX, VIIII pro počítání nevhodné soustava zbytkových tříd (residue number system) definována k-tice různých základů prvočísel číslo vyjádřeno k-ticí zbytků po dělení příslušným základem Příklad: základy 2,3,: číslo devět zapsáno jako 9 jednoznačné pouze pro čísla menší než součin základů Přepis celého čísla do soustavy s jiným základem Zápis čísla A v soustavě o základu z: A= a n- z n- + a n-2 z n-2 + + a z + a z = (a n- z n-2 + a n-2 z n-3 + a )z + a = a + z (a + z (a 2 + + z(a n-2 + za n- ) )) V soustavě o základu z bude A zapsáno: A= b + z (b + z (b 2 + + z (b n-2 + z b n- ) )) A= z A/z + A mod z Převodní algoritmus číslo v soustavě z V soustavě o základu z dělit základem nové soustavy (z ) NE Výsledek dělení Výsledek je nula ANO Zbytek = b n Konec 5 do binární soustavy: 5 : 2 = 75 75 : 2 = 37 37 : 2 = 8 8 : 2 = 9 9: 2 = 4 4: 2 = 2 2: 2 = : 2 = Příklady 34 9 do sedmičkové soust.: 34 : 7 = 7 7 : 7 = 2 2 2: 7 = 2 34 9 = 22 7 Převod do desítkové soustavy Koeficienty zápisu čísla o základu z vynásobíme příslušnou mocninou z a sečteme: A a n- a n-2 a a A = a n- z n- + a n-2 z n-2 + + a z + a z Hornerovo schéma: A = ( (a n- z+ a n-2 )z + )z + a 5 = 2 3
Převod čísla se zlomkovou částí Hledáme koeficienty pro z i, -m i n- Celá část: popsána výše Zlomková část: podobně, ale základem nové soustavy násobíme. Převodní algoritmus zlomkové části zlomková část čísla v soustavě z V soustavě o základu z násobit základem nové soustavy (z ) zlomková část celá část = b n NE desetinná část je nula ANO Konec Příklad Příklad, převést do dvojkové soustavy:, * 2 =,2,2 * 2 =,4,4 * 2 =,8,8 * 2 =,6,6 * 2 =,2,2 * 2 =,4,, 2 Postup nemusí být konečný!,678 převést do dvojkové soustavy:,678* 2 =,356,356* 2 =,72,72* 2 =,424,424* 2 =,848,848* 2 =,696,696* 2 =,392,392* 2 =,784,784* 2 =,568,678, 2 Čísla Zobrazení přirozených čísel I přirozená čísla celá čísla racionální reálná převodem do binární soustavy a přímým uložením 9 229 4
Zobrazení přirozených čísel II Zobrazení celých čísel BCD Binary Coded Decimal Každá cifra desítkového zápisu čísla reprezentována pomocí 4 bitů horní 4 bity nevyužity nebo využity jinak Příklad: 93 Problémy aritmetika speciální instrukce neúsporné packed BCD se znaménkem číslo převedeno do binární podoby doplněno znaménkovým bitem Problém: dvě reprezentace nuly, složitější operace s posunutím k číslu se přičte konstanta reprezentující nulu posunuté číslo se převede do binární podoby dvojkový doplněk přirozená čísla se zobrazí přímo, záporná jako pseudopozitivní číslo Dvojkový doplněk Aritmetika ve dvojkovém doplňku Mějme číslo A. Jeho doplněk A = A + M = - A + M kde M je modul. Pro dvojkovou soustavu je M=2 n kde n je počet cifer zápisu čísla. A =- A = (-) + 2 n pro n=4: 2 - +9 ----- - +9 - Ve dvojkové soustavě:. zneguj bity 2. přičti 9 +9! 9 znaménkové rozšíření +8 +8-8 -8 Konverze délek Příklady zobrazení číslo se znaménkem s posunutím dvojkový doplněk +7 +6 +5 +4 +3 +2 + + - - -2-3 -4-5 -6-7 -8 --- 5
Ukládání vícebytových sekvencí Big-endian IBM 37, PDP-, Motorola, různé RISC, IA-64 Little-endian PDP-, VAX, Intel, IA-64 (nižší adresa=nižší význam) (Midle-endian ani little, ani big. Used of perverse byte orders such as 3-4--2 or 2--4-3, ocassionally found in the packed-decimal formats of minicomputer manufacturers who shall remain nameless. ) NUXI problem Zobrazení reálných čísel Čísla s pevnou řádovou čárkou Zobrazení celých čísel je speciální případ, kdy řádová čárka je zcela vpravo Posunutím řádové čárky směrem vlevo měníme rozsah zobrazovaných čísel a přesnost zobrazení Zobrazení reálných čísel Z jiných reprezentací se nejvíce ujala reprezentace s plovoucí řádovou čárkou ( floating point ): Je dán základ β a přesnost p Příklad:,9 pro β=, p=3... 9. -, pro β=2, p=24... (nelze přesně). 2-4 Floating point Zápis ve tvaru ±d.d d 2... d p- β e ( d i < β ) reprezentuje číslo ±(d + d β - +... + d p- β -p ) β e Floating point Zápis nemusí být jednoznačný:. -. Je-li d, reprezentace je nazývána normalizovanou Pro d = je reprezentace nazývána denormalizovanou Znaménko exponentu Znaménko mantisy Znaménko mantisy Znaménko mantisy Používaná zobrazení Řádová čárka exponentu ±± Exponent Mantisa ± Exponent (s posunem) Řádová čárka exponentu i mantisy Mantisa Řádová čárka mantisy. ± Exponent Mantisa (vždy normalizována) Řádová čárka exponentu i mantisy 6
IEEE Standard 754 single precision: β=2, p=24, e = 8 bitů double precision: β=2, p=53, e = bitů quadruple precision: β=2, p=3, e = 5 bitů Extended formats: single extended: β=2, p 32, e bitů double extended: β=2, p 64, e 5 bitů Correct use of this format is a nontrivial challenge to programmers IEEE Standard 754 přesný zápis v bitovém formátu ± Exponent Mantisa 3 3 23 22 ± Exponent Mantisa 79 78 64 63 IEEE Standard 754 IEEE Standard 754 IEEE Standard 854 Možnosti zápisu dle IEEE 754 povoluje β=2 a β= neurčuje konkrétní zápis nevyžaduje konkrétní hodnoty p pro single a double precision zavádí omezující podmínky možných hodnot p. exponent e min - e min - < e min,e max > e max + mantisa m = m m m = význam ±.m 2 e min.m 2 e ± e max + m xxx xxx NaN e max + m xxx xxx SNaN 7
operace + / REM NaN vznik NaN + (- ) /, / x REM, REM y x pro x< POZOR na chování konkrétního procesoru a kompilátoru!!! Operace s floating-point čísly Sčítání o odečítání A=M z exp B=M 2 z exp 2 Pro exp =exp 2 je A+B = (M + M 2 ) z exp Pro exp exp 2 je nutno: A nebo B denormalizovat provést výpočet normalizovat výsledek Pozor: sčítání a odečítání nejsou asociativní přetečení či podtečení (při denormalizaci i při výpočtu) Operace s floating-point čísly Násobení a dělení A=M z exp B=M 2 z exp 2 A.B = (M.M 2 ) z exp +exp 2 A/B = (M / M 2 ) z exp -exp 2 Pozor: operace v binární soustavě se zápornými čísly mohou vést k časově náročným postupům. Řešení Boothovo kódování. místo hodnot, jsou použity relativní hodnoty +,,- Příklad: násobení 63: - Vznik chyb Při výpočtu overflow přetečení underflow podtečení divide by zero dělení nulou invalid neplatná operace inexact nepřesný výsledek Vznik chyb Při konverzi scaling error zavedením stupnice truncation error zanedbáním části čísla rounding error zaokrouhlením (při pořizování) Problémy IEEE 754/854 ((2-3 + 3 ) 3 ) -3-3 na počítači pracujícím podle IEEE = - -3 8