380 likes | 545 Views
Reprezentace dat. „ There are only 10 types of people in the world: - those who understand binary , - and those who don't. “. Typy dat. Literály logické hodnoty znaky grafické symboly nečíselná data Čísla celočíselná (integer) racionální (floating point) Instrukce. Logické hodnoty.
E N D
Reprezentace dat „There are only 10 types of people in the world: - those who understand binary,- and those who don't.“
Typy dat • Literály • logické hodnoty • znaky • grafické symboly • nečíselná data • Čísla • celočíselná (integer) • racionální (floating point) • Instrukce
Logické hodnoty • možno reprezentovat jediným bitem • problémy s adresováním • reprezentace celou datovou jednotkou • problémy s velikostí
Znaky • EBCDIC • 256 závazných znaků • 00 .. 3F ... speciální (řídící) znaky • 40 .. FF ... tisknutelné znaky • Mnoho volných pozic • Abeceda není v jednom bloku • ASCII • UNICODE
ASCII – „česká“ rozšíření • KOI8-čs • PC standard • EAST8 • Latin x (Latin 2) • Windows codepage (1250) • ISO/IEC 8859 (8859-2)
UNICODE • součást normy ISO/IEC 10646-1 (1993) • znak reprezentován vícebytovou sekvencí • diakritika • možnost uživatelských symbolů • problém se staršími programy • pozor na konkrétní implementaci • podpora téměř všech národních abeced
Reprezentace čísel • Polyadické číselné soustavy • Číslo reprezentujeme uspořádanou (m+n)-ticí koeficientů ai • Soustava může mít jeden nebo více základů(radix mumber system) • V soustavě s jedním základem z jsou hodnoty zi určeny jako zi=zi (s tímto vystačíme) • m=0 ... celá čísla, m>0 ... zlomková část
Reprezentace čísel • Nepolyadické • římské číslice • 1648 MDCXLVIII 2003 MMIII 9 IX, VIIII • pro počítání nevhodné • soustava zbytkových tříd (residue number system) • definována k-tice různýchzá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,11: číslo „devět“ zapsáno jako 109 • 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= an-1zn-1 + an-2zn-2 + … + a1z1 + a0z0= (an-1zn-2 + an-2zn-3 + … a1)z + a0= a0 + z (a1 + z (a2 + …+ z(an-2 + zan-1)…)) • V soustavě o základu z’ bude A zapsáno:A = b0 + z’(b1 + z’(b2 + …+ z’(bn-2 + z’bn-1)…)) • A= z’ A/z’ + A mod z’ • A/z’ je výsledek celočísel. dělení čísla A číslem z’ • A mod z’ je zbytek při tomto dělení
číslov soustavě z V soustavě o základu zdělit základem nové soustavy (z’) Výsledek dělení Zbytek = bn Výsledek je nula? NE ANO Konec Převodní algoritmus(pro celá čísla)
Příklady 1349 do sedmičkové soust.: 134 : 7 = 17 0 17 : 7 = 2 2 2 : 7 = 0 2 1349 = 2207 Pomocný výpočet: 134 : 7 = 17 54 0 15110 do binární soustavy: 151 : 2 = 75 1 75 : 2 = 37 1 37 : 2 = 18 1 18 : 2 = 9 0 9 : 2 = 4 1 4 : 2 = 2 0 2 : 2 = 1 0 1 : 2 = 0 1 15110 = 100101112
Převoddo desítkové soustavy • 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:Aan-1an-2 … a1a0A = an-1zn-1 + an-2zn-2 + … + a1z1 + a0z0 • Hornerovo schéma (úspornější výpočet):A = (…(an-1z+ an-2)z + …)z + a0
Převod čísla se zlomkovou částí • Hledáme koeficienty pro zi, -m i n-1 • Celá část: popsána výše • Zlomková část: podobně, ale základem nové soustavy násobíme. • Celá část dává další číslici • Zlomková část postupuje do další iterace
zlomková část číslav soustavě z V soustavě o základu znásobit základem nové soustavy (z’) zlomková část celá část = bn výsledek je nula? NE ANO Převodní algoritmus (pro zlomkovou část) Konec
Příklady 0,110 a 0,62510 převést do dvojkové soustavy: 0,1 * 2 = 0,2 0 0,625 * 2 = 1,250 1 0,2 * 2 = 0,4 0 0,250 * 2 = 0,500 0 0,4 * 2 = 0,8 0 0,500 * 2 = 1,000 1 0,8 * 2 = 1,6 1 0,6 * 2 = 1,2 1 0,62510 = 0,1012 0,2 * 2 = 0,4 0 0,110 0,0001100110011…2 Postup nemusí být konečný!
Uložení čísel v paměti • přirozená čísla • celá čísla • 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í)
Uložení přirozených čísel • převodem dobinární soustavy(přímé uložení) • 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 Příklad: 193010 0001 1001 0011 0000 Výhoda: snadné zpracování vstupů/výstupů Problémy: • aritmetika speciální instrukce • neúsporné packed BCD (2 cifry do 1 bytu)
Uložení celých čísel • se znaménkem • číslo převedeno do binární podoby • doplněno znaménkovým bitem (bit „zcela vlevo“) • dvě reprezentace nuly, složitější aritmetické 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 (zdaleka nejpoužívanější) • přirozená čísla se zobrazí přímo, záporná „trikem“ • vhodné pro aritmetické operace, zejména sčítání
Dvojkový doplněk • „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 -2n-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) • rozsah uložitelných čísel : (-2n-1, 2n-1 -1)
Konverze délek (u dvojkového doplňku) • znaménkové rozšíření +18 +18 -18 -18
Sčítání ve dvojkovém doplňku • funguje zde normální (školní) algoritmus na sčítá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ý • 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
Násobení • mnohem složitější operace než sčítání • 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 čísla ve dvojkovém doplňku je to složitější (Boothův algoritmus)
Násobení přirozených čísel • 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 • ve dvojkové soustavě: • bit násobitele je 0 částečný součin = 0 • 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 • součin dvou n-bitových čísel může být 2n-bitové číslo (delší ne) – např. 11 * 11 = 1001
Násobení přirozených číselAlgoritmus • Registry: A,Q,M n-bitové, C 1-bitový (pro přenos) • Inicializace: C,A := 0, Q := násobitel, M := násobenec • Cyklus (n krát použijeme nejpravější bit v Q, bit Q0): • Q0 = 0 posun sekvence C,A,Q o 1 bit vpravo • Q0 = 1 přičtení M do A (případné přetečení do C) plus posun sekvence C,A,Q o 1 bit vpravo C A Q M C A Q 0 0000 1101 1011 inicializace 0 1101 1111 součet3 0 1011 1101 součet1 0 0110 1111 posun3 0 0101 1110 posun1 100011111 součet4 0 0010 1111 posun2 0 1000 1111 posun4
Násobení ve dvojkovém doplňku • algoritmus pro přirozená čísla zde nefunguje • triviální algoritmus: • převés oba činitele na jejich absolutní hodnoty (pomocí negace), • vynásobit je jako přirozená čísla a pak • výsledek znegovat pokud právě jeden z činitelů byl záporný • Boothův algoritmus: • 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) • 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) • důkaz, že funguje korektně, je složitý (nebudeme provádět)
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“): • Je dán základ β a přesnost p (počet číslic) • Příklad:0,9 pro β=10, p=3 ... 9.00 10-10,1 pro β=2, p=24 ... (nelze přesně)1.10011001100110011001100 2-4
Floating – point reprezentace • Zápis ve tvaru (jedna cifra před desetinnou tečkou, zbytek za desetinnou tečkou) d0.d1d2 ... dp-1βe ( 0 di β ) reprezentuje číslo (d0 d1 β-1 ... dp-1 β1-p)βe • Zápis nemusí být jednoznačný: 1.00 10-10.01 101 • Je-li d0 0, reprezentace je nazývána normalizovanou • Pro d0 0 je reprezentace nazývána denormalizovanou
IEEE Standard 754 • dnes univerzálně rozšířený • normalizovaná mantisa a exponent s posunem • single precision: β=2, p=24, e = 8 bitů • double precision: β=2, p=53, e = 11bitů • quadruple precision: β=2, p=113, e = 15bitů Extended formats: • single extended:β=2, p≥32, e ≥11bitů • double extended:β=2, p≥64, e ≥15bitů
IEEE Standard 754 • zápis v bitovém formátu (single a double)
NaN Pozor na chování konkrétního procesoru a kompilátoru!!!!
Operace s floating-point číslyA=M1 zexp1 B=M2 zexp2 Sčítání o odečítání • Pro exp1exp2je A+B = (M1 + M2) zexp1 • Pro exp1exp2 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) Násobení a dělení • A.B = (M1. M2) zexp1+exp2 • A/B = (M1 / M2) zexp1-exp2
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 • Při konverzi • scaling error – zavedením stupnice (škálování) • truncation error – zanedbáním části čísla • rounding error – zaokrouhlením • (při pořizování)
Vícebytové sekvence • jedno číslo je typicky uloženo ve více bytech • problém – jak ukládat? jak přenášet? • od nižších „řádů“ • od vyšších „řádů“ • jinak...? • 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í
Ukládání vícebytových sekvencí • Big-endian • IBM 360/370, PDP-10, Motorola 6800, různé RISC • Little-endian • VAX, MOS 6502, Intel x86 • Midle-endian – ani little, ani big. „Use of perverse byte orders such as 3-4-1-2 or 2-1-4-3, ocassionally found in the packed-decimal formats of minicomputer manufacturers who shall remain nameless.“ • NUXI problem
Byte-sexual / bi-endian • PowerPC, DEC Alpha, MIPS, PA-RISC, ARM, IA64 • 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 little: MIPS + Ultrix, Alpha, IA-64 + Linux