Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

1 Reprezentace dat „There are only 10 types of people in the world: - those who understand binary, - and those who don't.“

Podobné prezentace


Prezentace na téma: "1 Reprezentace dat „There are only 10 types of people in the world: - those who understand binary, - and those who don't.“"— Transkript prezentace:

1 1 Reprezentace dat „There are only 10 types of people in the world: - those who understand binary, - and those who don't.“

2 2 Typy dat Literály Literály logické hodnoty logické hodnoty znaky znaky grafické symboly grafické symboly nečíselná data nečíselná data Čísla Čísla celočíselná (integer) celočíselná (integer) racionální (floating point) racionální (floating point) Instrukce Instrukce

3 3 Logické hodnoty možno reprezentovat jediným bitem možno reprezentovat jediným bitem problémy s adresováním problémy s adresováním reprezentace celou datovou jednotkou reprezentace celou datovou jednotkou problémy s velikostí problémy s velikostí

4 4 Znaky EBCDIC EBCDIC 256 závazných znaků 256 závazných znaků F... speciální (řídící) znaky F... speciální (řídící) znaky 40.. FF... tisknutelné znaky 40.. FF... tisknutelné znaky Mnoho volných pozic Mnoho volných pozic Abeceda není v jednom bloku Abeceda není v jednom bloku ASCII ASCII UNICODE UNICODE

5 5 ASCII American Standards Code for Information Interchange

6 6 ASCII – „česká“ rozšíření KOI8-čs KOI8-čs PC standard PC standard EAST8 EAST8 Latin x (Latin 2) Latin x (Latin 2) Windows codepage (1250) Windows codepage (1250) ISO/IEC 8859 (8859-2) ISO/IEC 8859 (8859-2)

7 7 UNICODE součást normy ISO/IEC (1993) součást normy ISO/IEC (1993) znak reprezentován vícebytovou sekvencí znak reprezentován vícebytovou sekvencí diakritika diakritika možnost uživatelských symbolů možnost uživatelských symbolů problém se staršími programy problém se staršími programy pozor na konkrétní implementaci pozor na konkrétní implementaci podpora téměř všech národních abeced podpora téměř všech národních abeced

8 8 Reprezentace čísel Polyadické číselné soustavy Polyadické číselné soustavy Číslo reprezentujeme uspořádanou (m+n)-ticí koeficientů a i Číslo reprezentujeme uspořádanou (m+n)-ticí koeficientů a i Soustava může mít jeden nebo více základů (radix mumber system) 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 (s tímto vystačíme) V soustavě s jedním základem z jsou hodnoty z i určeny jako z i =z i (s tímto vystačíme) m=0... celá čísla, m>0... zlomková část m=0... celá čísla, m>0... zlomková část

9 9 Reprezentace čísel Nepolyadické Nepolyadické římské číslice římské číslice 1648  MDCXLVIII 2003  MMIII 9  IX, VIIII 1648  MDCXLVIII 2003  MMIII 9  IX, VIIII pro počítání nevhodné pro počítání nevhodné soustava zbytkových tříd (residue number system) soustava zbytkových tříd (residue number system) definována k-tice různých základů – prvočísel 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 číslo vyjádřeno k-ticí zbytků po dělení příslušným základem Příklad: základy 2,3,11: číslo „devět“ zapsáno jako 109 Příklad: základy 2,3,11: číslo „devět“ zapsáno jako 109 jednoznačné pouze pro čísla menší než součin základů jednoznačné pouze pro čísla menší než součin základů

10 10 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-1 z n-1 + a n-2 z n-2 + … + a 1 z 1 + a 0 z 0 = (a n-1 z n-2 + a n-2 z n-3 + … a 1 )z + a 0 = a 0 + z (a 1 + z (a 2 + …+ z(a n-2 + za n-1 )…)) Zápis čísla A v soustavě o základu z: A = a n-1 z n-1 + a n-2 z n-2 + … + a 1 z 1 + a 0 z 0 = (a n-1 z n-2 + a n-2 z n-3 + … a 1 )z + a 0 = a 0 + z (a 1 + z (a 2 + …+ z(a n-2 + za n-1 )…)) V soustavě o základu z’ bude A zapsáno: A = b 0 + z’(b 1 + z’(b 2 + …+ z’(b n-2 + z’b n-1 )…)) V soustavě o základu z’ bude A zapsáno: A = b 0 + z’(b 1 + z’(b 2 + …+ z’(b n-2 + z’b n-1 )…)) A =  z’  A/z’  + A mod z’ A =  z’  A/z’  + A mod z’  A/z’  je výsledek celočísel. dělení čísla A číslem z’  A/z’  je výsledek celočísel. dělení čísla A číslem z’ A mod z’ je zbytek při tomto dělení A mod z’ je zbytek při tomto dělení

11 11 Převodní algoritmus (pro celá čísla) číslo v soustavě z V soustavě o základu z dělit základem nové soustavy (z’) Výsledek dělení Výslede k je nula? NE Zbytek = b n Konec ANO

12 12 Příklady do binární soustavy: 151: 2 =751 75: 2 =371 37: 2 =181 18: 2 =90 9: 2 =41 4: 2 =20 2: 2 =10 1: 2 = = do sedmičkové soust.: 134: 7 = : 7 =170 17: 7 =22 17: 7 =22 2: 7 =02 2: 7 = = Pomocný výpočet: 134 : 7 =

13 13 Převod do desítkové soustavy V té jsme zvyklí počítat, takže to jde takto: V té jsme zvyklí počítat, takže to jde takto: Koeficienty zápisu čísla o základu z vynásobíme příslušnou mocninou z a sečteme: A  a n-1 a n-2 … a 1 a 0 A = a n-1 z n-1 + a n-2 z n-2 + … + a 1 z 1 + a 0 z 0 Koeficienty zápisu čísla o základu z vynásobíme příslušnou mocninou z a sečteme: A  a n-1 a n-2 … a 1 a 0 A = a n-1 z n-1 + a n-2 z n-2 + … + a 1 z 1 + a 0 z 0 Hornerovo schéma (úspornější výpočet): A = (…(a n-1 z + a n-2 )z + …)z + a 0 Hornerovo schéma (úspornější výpočet): A = (…(a n-1 z + a n-2 )z + …)z + a 0

14 14 Převod čísla se zlomkovou částí Hledáme koeficienty pro z i, -m  i  n-1 Hledáme koeficienty pro z i, -m  i  n-1 Celá část: popsána výše Celá část: popsána výše Zlomková část: podobně, ale základem nové soustavy násobíme. Zlomková část: podobně, ale základem nové soustavy násobíme. Celá část dává další číslici Celá část dává další číslici Zlomková část postupuje do další iterace Zlomková část postupuje do další iterace

15 15 Převodní algoritmus (pro zlomkovou část) zlomková část čísla v soustavě z V soustavě o základu z násobit základem nové soustavy (z’) zlomková část výsledek je nula? NE celá část = b n ANO Konec

16 16 Příklady 0,1 10 a 0, převést do dvojkové soustavy: 0,1* 2 =0,200,625 * 2 = 1,2501 0,2* 2 =0,400,250 * 2 = 0,5000 0,4* 2 =0,800,500 * 2 = 1,0001 0,8* 2 =1,61 0,6* 2 =1,21 0, = 0, ,2* 2 =0,40 0,1 10  0, … 2 Postup nemusí být konečný!

17 17 Uložení čísel v paměti přirozená čísla přirozená čísla celá čísla celá čísla racionální racionální reálná (někdy se tomu tak říká, ale stejně jde jen o racionální čísla – neboť každé číslo s konečným desetinným, binárním, … rozvojem je racionální) reálná (někdy se tomu tak říká, ale stejně jde jen o racionální čísla – neboť každé číslo s konečným desetinným, binárním, … rozvojem je racionální)

18 18 Uložení přirozených čísel převodem do binární soustavy (přímé uložení) převodem do binární soustavy (přímé uložení) BCD – Binary Coded Decimal BCD – Binary Coded Decimal Každá cifra desítkového zápisu reprezentována pomocí dolních 4 bitů v bytu „horní“ 4 bity nevyužity nebo využity jinak „horní“ 4 bity nevyužity nebo využity jinak Příklad:  Výhoda: snadné zpracování vstupů/výstupů Problémy: aritmetika  speciální instrukce aritmetika  speciální instrukce neúsporné  packed BCD (2 cifry do 1 bytu) neúsporné  packed BCD (2 cifry do 1 bytu)

19 19 Uložení celých čísel se znaménkem se znaménkem číslo převedeno do binární podoby číslo převedeno do binární podoby doplněno znaménkovým bitem (bit „zcela vlevo“) doplněno znaménkovým bitem (bit „zcela vlevo“) dvě reprezentace nuly, složitější aritmetické operace dvě reprezentace nuly, složitější aritmetické operace s posunutím s posunutím k číslu se přičte konstanta reprezentující nulu k číslu se přičte konstanta reprezentující nulu posunuté číslo se převede do binární podoby posunuté číslo se převede do binární podoby dvojkový doplněk (zdaleka nejpoužívanější) dvojkový doplněk (zdaleka nejpoužívanější) přirozená čísla se zobrazí přímo, záporná „trikem“ přirozená čísla se zobrazí přímo, záporná „trikem“ vhodné pro aritmetické operace, zejména sčítání vhodné pro aritmetické operace, zejména sčítání

20 20 Dvojkový doplněk „nejlevější bit“ je opět znaménkový „nejlevější bit“ je opět znaménkový uložené číslo dostaneme jako součet mocniné řady (jako u přirozených čísel) s tím, že pokud je znaménkový bit roven 1, tak v řadě reprezentuje číslo -2 n-1 (kde n je počet bitů v reprezentaci) uložené číslo dostaneme jako součet mocniné řady (jako u přirozených čísel) s tím, že pokud je znaménkový bit roven 1, tak v řadě reprezentuje číslo -2 n-1 (kde n je počet bitů v reprezentaci) negace: z čísla se vyrobí číslo stejné „velikosti“ s opačným znaménkem takto: invertuj všechny bity a přičti 1 (sčítání jako u přirozených čísel) negace: z čísla se vyrobí číslo stejné „velikosti“ s opačným znaménkem takto: invertuj všechny bity a přičti 1 (sčítání jako u přirozených čísel) rozsah uložitelných čísel : (-2 n-1, 2 n-1 -1) rozsah uložitelných čísel : (-2 n-1, 2 n-1 -1)

21 21 Příklady uložení číslo se znaménkem s posunutím dvojkový doplněk

22 22 Konverze délek (u dvojkového doplňku) znaménkové rozšíření znaménkové rozšíření

23 23 Sčítání ve dvojkovém doplňku funguje zde normální (školní) algoritmus na sčítání funguje zde normální (školní) algoritmus na sčítání přenos ze znaménkového bitu ven je ignorován přenos ze znaménkového bitu ven je ignorován přetečení (overflow) nastává právě tehdy, když znaménkový bit obou sčítanců je stejný a znaménkový bit součtu je opačný přetečení (overflow) nastává právě tehdy, když znaménkový bit obou sčítanců je stejný a znaménkový bit součtu je opačný odečítání se realizuje pomocí negace a sčítání: A-B = A+(-B), tedy bitová inverze na B, přičtení jedničky a sečtení s A odečítání se realizuje pomocí negace a sčítání: A-B = A+(-B), tedy bitová inverze na B, přičtení jedničky a sečtení s A

24 24 Násobení mnohem složitější operace než sčítání mnohem složitější operace než sčítání implementace postupným sčítáním je pomalá (a*b = a + … + a) implementace postupným sčítáním je pomalá (a*b = a + … + a) pro přirozená čísla jde přímočaře implementovat „školní“ algoritmus pro přirozená čísla jde přímočaře implementovat „školní“ algoritmus pro čísla ve dvojkovém doplňku je to složitější (Boothův algoritmus) pro čísla ve dvojkovém doplňku je to složitější (Boothův algoritmus)

25 25 Násobení přirozených čísel terminologie: násobenec x násobitel = součin terminologie: násobenec x násobitel = součin součin dostaneme jako součet částečných součinů, každý pro jednu číslici násobitele součin dostaneme jako součet částečných součinů, každý pro jednu číslici násobitele ve dvojkové soustavě: ve dvojkové soustavě: bit násobitele je 0  částečný součin = 0 bit násobitele je 0  částečný součin = 0 bit násobitele je 1  částečný součin = násobenec bit násobitele je 1  částečný součin = násobenec při sčítání je každý částečný součet posunut o jeden bit doleva vzhledem k předchozímu při sčítání je každý částečný součet posunut o jeden bit doleva vzhledem k předchozímu součin dvou n-bitových čísel může být 2n-bitové číslo (delší ne) – např. 11 * 11 = 1001 součin dvou n-bitových čísel může být 2n-bitové číslo (delší ne) – např. 11 * 11 = 1001

26 26 Násobení přirozených čísel Algoritmus Registry: A,Q,M n-bitové, C 1-bitový (pro přenos) Registry: A,Q,M n-bitové, C 1-bitový (pro přenos) Inicializace: C,A := 0, Q := násobitel, M := násobenec Inicializace: C,A := 0, Q := násobitel, M := násobenec Cyklus (n krát použijeme nejpravější bit v Q, bit Q 0 ): Cyklus (n krát použijeme nejpravější bit v Q, bit Q 0 ): Q 0 = 0  posun sekvence C,A,Q o 1 bit vpravo Q 0 = 0  posun sekvence C,A,Q o 1 bit vpravo Q 0 = 1  přičtení M do A (případné přetečení do C) plus posun sekvence C,A,Q o 1 bit vpravo Q 0 = 1  přičtení M do A (případné přetečení do C) plus posun sekvence C,A,Q o 1 bit vpravo CAQM CAQ inicializace součet součet posun posun součet posun posun4

27 27 Násobení ve dvojkovém doplňku algoritmus pro přirozená čísla zde nefunguje algoritmus pro přirozená čísla zde nefunguje triviální algoritmus: triviální algoritmus: převés oba činitele na jejich absolutní hodnoty (pomocí negace), převés oba činitele na jejich absolutní hodnoty (pomocí negace), vynásobit je jako přirozená čísla a pak vynásobit je jako přirozená čísla a pak výsledek znegovat pokud právě jeden z činitelů byl záporný výsledek znegovat pokud právě jeden z činitelů byl záporný Boothův algoritmus: Boothův algoritmus: chytrá modifikace algoritmu pro přirozená čísla chytrá modifikace algoritmu pro přirozená čísla v každé iteraci aritmetický posun zachovávající znaménko (nejlevější bit v A se posune vpravo a zreplikuje, C není použito) v každé iteraci aritmetický posun zachovávající znaménko (nejlevější bit v A se posune vpravo a zreplikuje, C není použito) součet jen na začátku a konci bloku jedniček (odečtení na začátku bloku a přičtení na konci) součet jen na začátku a konci bloku jedniček (odečtení na začátku bloku a přičtení na konci) rychlejší než triviální algoritmus (téměř na všech HW používán) rychlejší než triviální algoritmus (téměř na všech HW používán) důkaz, že funguje korektně, je složitý (nebudeme provádět) důkaz, že funguje korektně, je složitý (nebudeme provádět)

28 28 Uložení racionálních čísel Z různých možných reprezentací se nejvíce ujala reprezentace s plovoucí řádovou čárkou („floating point“): Z různých možných reprezentací se nejvíce ujala reprezentace s plovoucí řádovou čárkou („floating point“): Je dán základ β a přesnost p (počet číslic) Je dán základ β a přesnost p (počet číslic) Příklad: 0,9 pro β=10, p=  ,1 pro β=2, p=24... (nelze přesně)  2 -4 Příklad: 0,9 pro β=10, p=  ,1 pro β=2, p=24... (nelze přesně)  2 -4

29 29 Floating – point reprezentace Zápis ve tvaru (jedna cifra před desetinnou tečkou, zbytek za desetinnou tečkou) Zápis ve tvaru (jedna cifra před desetinnou tečkou, zbytek za desetinnou tečkou)  d 0.d 1 d 2... d p-1  β e ( 0  d i  β ) reprezentuje číslo  (d 0  d 1 β -1 ...  d p-1 β 1-p ) β e Zápis nemusí být jednoznačný: 1.00   10 1 Zápis nemusí být jednoznačný: 1.00   10 1 Je-li d 0  0, reprezentace je nazývána normalizovanou Je-li d 0  0, reprezentace je nazývána normalizovanou Pro d 0  0 je reprezentace nazývána denormalizovanou Pro d 0  0 je reprezentace nazývána denormalizovanou

30 30 IEEE Standard 754 dnes univerzálně rozšířený dnes univerzálně rozšířený normalizovaná mantisa a exponent s posunem normalizovaná mantisa a exponent s posunem single precision: β=2, p=24,  e  = 8 bitů single precision: β=2, p=24,  e  = 8 bitů double precision: β=2, p=53,  e  = 11 bitů double precision: β=2, p=53,  e  = 11 bitů quadruple precision: β=2, p=113,  e  = 15 bitů quadruple precision: β=2, p=113,  e  = 15 bitů Extended formats: single extended: β=2, p≥32,  e  ≥ 11 bitů single extended: β=2, p≥32,  e  ≥ 11 bitů double extended: β=2, p≥64,  e  ≥ 15 bitů double extended: β=2, p≥64,  e  ≥ 15 bitů

31 31 IEEE Standard 754 zápis v bitovém formátu (single a double) zápis v bitovém formátu (single a double)

32 32 Možnosti zápisu dle IEEE 754 exponentmantisavýznam e min …000 m  0m  0m  0m  0  0 0 0 0 e min -1 m  0m  0m  0m  0  0.m  2 e min m  1.m  2 e e max …111 m  0m  0m  0m  0      e max +1 m  0 1xxx…xxx QNaN e max +1 m  0 0xxx…xxx SNaN

33 33 NaN Pozor na chování konkrétního procesoru a kompilátoru!!!! operace vznik NaN +  + (-  )  0   / 0/0,  /    x pro x<0

34 34 Operace s floating-point čísly A=M 1  z exp 1 B=M 2  z exp 2 Sčítání o odečítání Pro exp 1  exp 2 je A+B = (M 1 + M 2 )  z exp 1 Pro exp 1  exp 2 je A+B = (M 1 + M 2 )  z exp 1 Pro exp 1  exp 2 je nutno: Pro exp 1  exp 2 je nutno: A nebo B denormalizovat A nebo B denormalizovat provést výpočet provést výpočet normalizovat výsledek normalizovat výsledek Pozor: Pozor: sčítání a odečítání nejsou asociativní sčítání a odečítání nejsou asociativní přetečení či podtečení (při denormalizaci i při výpočtu) přetečení či podtečení (při denormalizaci i při výpočtu) Násobení a dělení A.B = (M 1. M 2 )  z exp 1 +exp 2 A.B = (M 1. M 2 )  z exp 1 +exp 2 A/B = (M 1 / M 2 )  z exp 1 -exp 2 A/B = (M 1 / M 2 )  z exp 1 -exp 2

35 35 Vznik chyb Při výpočtu Při výpočtu overflow – přetečení overflow – přetečení underflow – podtečení underflow – podtečení divide by zero – dělení nulou divide by zero – dělení nulou invalid – neplatná operace invalid – neplatná operace inexact – nepřesný výsledek inexact – nepřesný výsledek Při konverzi Při konverzi scaling error – zavedením stupnice (škálování) scaling error – zavedením stupnice (škálování) truncation error – zanedbáním části čísla truncation error – zanedbáním části čísla rounding error – zaokrouhlením rounding error – zaokrouhlením (při pořizování) (při pořizování)

36 36 Vícebytové sekvence jedno číslo je typicky uloženo ve více bytech jedno číslo je typicky uloženo ve více bytech problém – jak ukládat? jak přenášet? problém – jak ukládat? jak přenášet? od nižších „řádů“ od nižších „řádů“ od vyšších „řádů“ od vyšších „řádů“ jinak...? jinak...? po jakých částech? po jakých částech? hlavní problém: potrabilita SW a portabilita dat mezi zařízeními s různými způsoby ukládání hlavní problém: potrabilita SW a portabilita dat mezi zařízeními s různými způsoby ukládání

37 37 Ukládání vícebytových sekvencí Big-endian Big-endian IBM 360/370, PDP-10, Motorola 6800, různé RISC IBM 360/370, PDP-10, Motorola 6800, různé RISC Little-endian Little-endian VAX, MOS 6502, Intel x86 VAX, MOS 6502, Intel x86 Midle-endian – ani little, ani big. „Use of perverse byte orders such as or , ocassionally found in the packed-decimal formats of minicomputer manufacturers who shall remain nameless.“ Midle-endian – ani little, ani big. „Use of perverse byte orders such as or , ocassionally found in the packed-decimal formats of minicomputer manufacturers who shall remain nameless.“ NUXI problem NUXI problem

38 38 Byte-sexual / bi-endian PowerPC, DEC Alpha, MIPS, PA-RISC, ARM, IA64 PowerPC, DEC Alpha, MIPS, PA-RISC, ARM, IA64 někdy lze změnit programově (bit v konfiguraci) někdy jen HW (DEC Alpha) někdy lze změnit programově (bit v konfiguraci) někdy jen HW (DEC Alpha) default big: MIPS + IRIX, PA-RISC, většina PPC default big: MIPS + IRIX, PA-RISC, většina PPC default little: MIPS + Ultrix, Alpha, IA-64 + Linux default little: MIPS + Ultrix, Alpha, IA-64 + Linux


Stáhnout ppt "1 Reprezentace dat „There are only 10 types of people in the world: - those who understand binary, - and those who don't.“"

Podobné prezentace


Reklamy Google