*ísla v po*íta*i

Download Report

Transcript *ísla v po*íta*i

Čísla v počítači Přednáška z předmětu Počítače I Dana Nejedlová Katedra informatiky EF TUL

1

• • •

Celá čísla

Jejich jiný název je čísla s pevnou řádovou čárkou point numbers ).

( fixed Mají pevný maximální počet míst před i za desetinnou čárkou.

– Když je tento maximální počet míst dostatečně nízký, je nejvýhodnější čísla v počítači ukládat jako celá čísla.

– Číslo v desítkové soustavě se vynásobí konstantou rovnou 10 na maximální počet desetinných míst.

– Například pro maximálně 4 desetinná místa • 1,23 se uloží jako 12300.

• • 0,456 se uloží jako 4560.

Pro zobrazení čísla použijeme konstantu 10 4 .

– – Dělíme uložené číslo 10000, tedy umístíme desetinnou čárku pevný počet míst od konce uloženého čísla.

Aritmetické operace lze provádět s takto uloženými čísly bez využití informace o maximálním počtu desetinných míst.

– Takže se dál budeme bavit jen o celých číslech.

2

• • • •

Reprezentace kladných celých čísel

Uchovávají se v určitém počtu bajtů.

– 1 bajt (byte) má 8 bitů.

Číslo se převede do dvojkové (binární) soustavy a z levé strany se doplní nulami.

– 11 v desítkové soustavě je 1011 binárně.

– V 8 bitech se uloží jako 0000 1011.

Převod čísla c do binární soustavy – Využijeme vzorec c = 2 ∙ d + z, kde • d je výsledek celočíselného dělení (kolikrát se 2 vejde celé do c), • z je zbytek po celočíselném dělení.

– 11 = 2 ∙ 5 + 1 – binárně 1011 = 10 ∙ 101 + 1 – 5 = 2 ∙ 2 + 1 – binárně – 2 = 2 ∙ 1 + 0 – binárně – 1 = 2 ∙ 0 + 1 – binárně – 11 10 = 1011 2 Převod zpět: 11 10 = 1 ∙2 3 + 101 = 10 ∙ 10 + 1 0 10 = 10 ∙ 1 + 0 ∙2 1 = 10 ∙ 0 + 1 2 + 1 ∙2 1 + 1 ∙2 0 = 8+2+1 3

• • • •

Sčítání

Procesor má pro jeho provedení obvod.

11 = 0000 1011 7 = 0000 0111 18 = 0001 0010 • • • 11 = 0000 1011 24 = 0001 1000 35 = 0010 0011 4

• • • • • • •

Odčítání

Má v matematice jiný algoritmus než sčítání.

11 = 0000 1011 –7 = – 0000 0111 4 = 0000 0100 Procesor by pro odčítání dle algoritmu shodného s matematickým musel mít jiný obvod.

Efektivnější je ale využít i pro odčítání sčítací obvod.

– Je to možné?

– Ano, pokud budeme záporná čísla správně reprezentovat.

Jak má v počítači vypadat záporné číslo?

– Může se od kladného odlišovat tím, že by mělo nejvyšší bit roven 1 místo 0.

• Potom by se ale pro odčítání nemohl použít stejný algoritmus jako pro sčítání.

– Záporná čísla lze reprezentovat tak, aby odčítání A – B bylo v počítači realizováno jako A + (reprezentace záporného B).

• Výsledky budou zase buďto kladná čísla nebo reprezentace záporných čísel.

5

• • •

Reprezentace záporných celých čísel

Nejefektivnější vzhledem k algoritmizaci je takzvaný dvojkový doplněk ( two's complement ).

Jeho teoretickým základem je modulární aritmetika , kde se čísla v řadě periodicky opakují.

V následující řadě se cyklicky opakují poslední 3 bity po 8 hodnotách.

6

0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 3 4 5 0 1 4 5 2 3 6 7 0 1 2 3 -4 -3 0 1 2 3 -4 -3 0 1 2 -2 -1

Binární čísla a cyklická řada

• • • Souvislá řada binárních čísel Každému binárnímu číslu přiřadíme dekadickou hodnotu jeho nejnižších 3 míst.

Každému binárnímu číslu přiřadíme záporné číslo, pokud je jeho 3. nejnižší bit roven 1, tak, aby vznikla souvislá řada od nejnižšího čísla (-4) k nejvyššímu číslu (3).

7

0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 3 4 5 0 1 4 5 2 3 6 7 0 1 2

Binární čísla a cyklická řada

0 1 2 3 -4 -3 -2 -1 0 1 2 3 -4 -3 • • • • • • • • • • • • • • Budeme počítat v cyklické aritmetice s 8 možnými hodnotami 0 až 7 nebo -4 až 3.

Bude to tedy aritmetika modulo 2 3 .

Stejný výpočet uvedeme nejdřív v periodické řadě nezáporných čísel a potom v něm nahradíme všechny hodnoty hodnotami na stejném řádku v řadě znaménkových čísel.

2 + 4 = 6 2 – 4 = –2 2 + 7 = 1 (Ne 9, protože to je mimo náš rozsah.) 2 – 1 = 1 6 + 7 = 5 (Ne 13, protože to je mimo náš rozsah.) –2 – 1 = –3 Pokud byla čísla v rozsahu, tak výsledky byly správné.

Máme tedy systém, kde odčítání realizujeme sčítáním. V tomto systému se dá i násobit.

Sčítají se nebo násobí binární vyjádření čísel.

Periodicita je vyjádřena ignorováním 1. bitu (neboli 4. nejnižšího bitu).

Zbývá dořešit převod kladného čísla na záporné.

8

0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 3 4 5 0 1 4 5 2 3 6 7 0 1 2

Převod na dvojkový doplněk čísla

3 -4 -3 0 1 2 3 -4 -3 0 1 2 -2 -1 • • • • • • • U všech bitů kladného čísla změníme (přehodíme) hodnotu a k výsledku přičteme 1.

V následujících příkladech budeme počítat s 3 nejnižšími bity.

5 = 101 → 010 + 1 = 011 = 3.

4 = 100 → 011 + 1 = 100 = –4.

3 = 011 → 100 + 1 = 101 = –3.

1 = 001 → 110 + 1 = 111 = –1.

0 = 000 → 111 + 1 = 000 = 0.

9

• • • • • • • • • •

Dvojkový doplněk v počítači

8 bitové celé číslo –11 1111 0101 = dvojkový doplněk čísla 11 + 0000 1011 = číslo 11 1 0000 0000 = 2 8 16 bitové celé číslo –11 1111 1111 1111 0101 = dvojkový doplněk 11 + 0000 0000 0000 1011 = číslo 11 1 0000 0000 0000 0000 = 2 16 Záporné číslo je uloženo jako – 2 na počet bitů – kladné číslo.

Dvojkový doplněk čísla c v n bitech = 2

n

c.

10

• • • •

Výpočty s dvojkovým doplňkem

Na příkladech s 8 bitovými čísly 0001 1000 = 24 + 1111 0101 = –11 neboli dvojkový doplněk 11 1 0000 1101 = 13 + 2 8 , 2 8 není součástí výsledku • • • 0000 1011 = 11 + 1110 1000 = –24 neboli dvojkový doplněk čísla 24 0 1111 0011 = –13 neboli dvojkový doplněk čísla 13 • • • • 1111 0101 = –11 neboli dvojkový doplněk čísla 11 + 1110 1000 = –24 neboli dvojkový doplněk čísla 24 1 1101 1101 = –35 neboli dvojkový doplněk čísla 35 + 2 8 , 2 8 není součástí výsledku.

Takže vše můžeme počítat v 8 bitech a bity, které se do nich při součtech nevejdou, můžeme zahodit.

11

• • • • • • • • • •

Detekce chyb při výpočtech

Je založena na tom, že čísla ve dvojkovém doplňku mají nejvyšší bit roven 1. Podle něj lze chybu detekovat.

Chyba může vzniknout jen při součtu 2 čísel se stejným znaménkem.

Přetečení ( overflow ) 0110 0100 = 100 + 0011 0010 = 50 0 1001 0110 = 150 – Pokud je výsledek interpretován neznaménkově, je výpočet správně.

– Pokud je výsledek interpretován znaménkově, vyjde záporné číslo, dvojkový doplněk čísla 106, protože 8. bit je roven 1.

– – Součet dvou kladných čísel vyjde záporně.

150 + 106 = 256 = 2 8 = modulo tohoto sčítání.

Podtečení ( underflow ) 1001 1100 = –100 + 1100 1110 = – 50 1 0110 1010 = 2 8 – + 106, 2 8 není součástí výsledku.

Součet dvou záporných čísel vyjde kladně.

– –150 – 106 = –256 = –2 8 .

12

• • • • •

Rozsah dvojkového doplňku v 8 bitech

Maximální číslo 127 = 2 7 – 1 = 0111 1111 1 1 = 2 0 = 0000 0001 0 0 = 2 0 – 1 = 0000 0000 –1 –1 = 2 8 – 1 = 1111 1111 Minimální číslo –128 = 2 7 = 1000 0000 • Čísla ve více bitech jsou tomu analogická.

13

• •

Co je třeba umět do testu

Převést konkrétní celé číslo na jeho dvojkový doplněk.

Jaké chyby vznikají při výpočtech s celými čísly?

14

• • •

Reálná čísla

Jejich jiný název je čísla s pohyblivou řádovou čárkou numbers ).

( floating-point Potřebujeme jediným datovým typem reprezentovat čísla s velkým rozsahem počtu míst před nebo za desetinnou čárkou.

– čísla blížící se nekonečnu, neboli s velkou vzdáleností od nuly na reálné ose – čísla blížící se nule, neboli s velkým záporným řádem Datový typ – Je určitý formát, ve kterém je uložena informace v počítači.

– Určuje • přípustné hodnoty informace a • přípustné operace, které se s informací mohou provádět.

– Celá čísla v určitém počtu bitů a s určitým rozsahem (znaménková, neznaménková) jsou určitým datovým typem neboli formátem.

– Reálná čísla mají také své formáty.

– Je záležitostí dohody mezi výrobci technologií neboli standardem.

– Nejrozšířenější standard pro reprezentaci reálných čísel ve výpočetních systémech je IEEE 754 .

15

• • • •

Teoretické základy standardu IEEE 754

Semilogaritmický tvar (vědecká notace) čísla – Počítače nebo kalkulačky tak zobrazují příliš malá nebo velká čísla.

Zápis čísla se skládá ze – znaménka, – mantisy ( significand ), – exponentu a – základu umocňování.

23,125 = 2,3125 ∙ 10 1 – = 2312,5 ∙ 10 –2 = 0,23125 ∙ 10 Číslo může být zapsáno mnoha způsoby.

• Může být různé umístění čárky a různý základ exponentu.

• Tyto různé možnosti mohou být standardizovány.

2 … IEEE 754 – Před čárkou je 1 místo.

• normalizace – Základ exponentu je 2.

16

• •

Mantisa (significand) v IEEE 754

Když je základ exponentu 2, tak se mantisa skládá z řetězce nul a jedniček a vždy začíná na 1. Proto se vynechá, aby se ušetřil 1 bit.

– leading bit convention , implicit bit convention , hidden bit convention Převedeme číslo 3,8125 do binární soustavy: – Bude se převádět zvlášť část čísla před čárkou a za čárkou.

– 3 = 2 ∙ 1 + 1 – 1 = 2 ∙ 0 + 1 – Před čárkou je 11 .

– Zlomková část binárního čísla se řídí vzorcem • c =

k

–1 ∙ 2 –1 +

k

–2 ∙ 2 –2 +

k

–3 ∙ 2 –3 +

k

–4 ∙ 2 –4 + ...

k

= {0, 1} • Násobení číslem 2 způsobí, že před desetinnou čárku se dostane koeficient čísla 2 –1 .

– 0,8125 ∙ 2 = 1 ,625 – – 0,625 ∙ 2 = 0,25 ∙ 2 = 1 0 ,25 ,5 – 0,5 ∙ 2 = 1 – – Za čárkou je 3,8125 = 11 , 1101 1101 .

= 1, 11101 ∙ 2 1 . Zelené hodnoty se uloží.

17

• • •

Znaménko a exponent v IEEE 754

Znaménko je uloženo v prvním bitu čísla.

– 1 znamená mínus, 0 znamená plus.

Exponent je celé číslo, které může být kladné nebo záporné.

– Neukládá se jako dvojkový doplněk, aby šla jednodušeji porovnávat jeho velikost.

– K jeho skutečné hodnotě se připočte kladné celé číslo dané standardem IEEE 754 zvané posunutí ( bias ) a potom se zakóduje jako kladné celé číslo.

• Exponenty v přípustném rozsahu tak jsou vždy kladné.

• Vyšší exponent je vyšší neznaménkové číslo než nižší exponent.

– Maximální exponent určuje rozsah maximální vzdálenost od nuly.

čísla neboli jeho Komponenty formátu IEEE 754 jsou v pořadí znaménko, exponent, mantisa, což umožňuje porovnávání čísel se stejným znaménkem pomocí obvodů pro celočíselnou aritmetiku.

18

• • • • •

IEEE 754 a aritmetické operace

Jsou výpočetně náročnější a proto by se měly reálné datové typy využívat jen, když jsou opravdu nutné.

Vznikají při nich zaokrouhlovací chyby .

– Řádově nejnižší číslice výsledku výpočtu nejsou správné.

– Nemůžeme testovat rovnost reálných čísel.

• Místo (a = b) se musí testovat stylem abs(a b) < 0,00001 .

Počet bitů vyhrazený pro exponent je konečný, takže může vzniknout i přetečení.

Podtečení znamená, že číslo se blíží nule.

Čísla, která mají v jiné třeba desítkové soustavě konečný počet desetinných míst, nemusí mít konečný počet míst ve dvojkové soustavě.

19

• • • • • • • • • • • •

IEEE 754 a zaokrouhlovací chyby

Převedeme číslo 0,1 v desítkové soustavě do dvojkové soustavy: 0,1 ∙ 2 = 0 ,2 0,2 ∙ 2 = 0 ,4 0,4 ∙ 2 = 0 ,8 0,8 ∙ 2 = 1 ,6 0,6 ∙ 2 = 1 ,2 0,2 ∙ 2 = 0 ,4 Odtud se to opakuje.

0,4 ∙ 2 = 0 ,8 0,1 10 = 0, 0 0011 00 11 … 2 Když číslo opakovaně násobíme 2 a ztratí se z něj desetinná část, tak je číslo ve dvojkové soustavě vyjádřitelné bez chyb.

Násobení nebo dělení – Vynásobí se mantisy a sečtou nebo odečtou se exponenty.

Sčítání a odčítání – Dochází při něm k větším zaokrouhlovacím chybám než u násobení.

– Číslo s nižším exponentem se musí denormalizovat.

– 1,2345 ∙ 10 5 + 6,78 ∙ 10 –2 = – = 1,234500000 ∙ 10 5 – + 0,000000678 ∙ 10 5 – = 1,234500678 ∙ 10 5 – Výsledek se nemusí vejít do mantisy, takže se uříznou řádově nejnižší číslice.

– Může se stát, že číslice řádově nižšího sčítance se uříznou všechny.

20

• • • •

Rozdíl mezi sousedními hodnotami reálných čísel

V matematice je nekonečně malý.

Formát IEEE 754 má fixní počet bitů pro mantisu.

Máme například mantisu, kam se vejde jen 5 číslic: – 1,2345 ∙ 10 5 má sousední vyšší číslo 1,2346 ∙ 10 5 .

• Rozdíl je 0,0001 ∙ 10 5 .

– 1,2345 ∙ 10 –5 • má sousední vyšší číslo 1,2346 ∙ 10 Rozdíl je 0,0001 ∙ 10 –5 .

–5 .

– Na rozdíl od celočíselných datových typů je rozdíl mezi sousedními reálnými čísly různý.

• Reálná čísla by se neměla používat jako řídící proměnná cyklu nebo index prvku pole.

Čím větší je počet bitů vyhrazený pro mantisu, tím blíže se může číslo uložené v počítači přiblížit teoretické matematické hodnotě čísla.

– Velikost mantisy určuje přesnost čísla.

21

• • • •

Co je třeba umět do testu

Jaké chyby vznikají při výpočtech s reálnými čísly?

Jaká část formátu IEEE 754 určuje – rozsah čísla a – přesnost čísla?

Rozpoznat, zda je dané reálné číslo v desítkové soustavě reprezentovatelné v počítači ve formátu IEEE 754 bez ztráty přesnosti.

Jak se liší rozdíl mezi sousedními možnými hodnotami čísla ve formátu IEEE 754 od čísla ve formátu dvojkového doplňku?

22

• • • •

Znaky

Znak ( character ) je počítačová reprezentace jednotlivého písmena tak, aby byla možná práce s textem, například vyhledávání.

Abeceda znaků, znaková sada ( character set ), mapuje množinu znaků na množinu celých čísel.

– Čísla jsou kódy znaků.

Stejný znak může být počítačem zobrazen různou velikostí, tvarem, fontem (například tučně, kurzívou…).

Na světě je spousta abeced a spousta mapování znaků na čísla, neboli kódování.

23

• • • • •

Kód ASCII

American Standard Code for Information Interchange Vznikl v 60. letech 20. století.

Byl původně určen pro dálnopis a tiskárny.

– Proto jsou jeho součástí řídící znaky s kódem 0-31.

Je 7 bitový.

– Mapuje 128 znaků.

• interpunkce • • číslice (0-9) znaky anglické abecedy – velké ( uppercase letters ) A-Z – malé ( lowercase letters ) a-z Je to nejstarší kód rozšířený v informačních a komunikačních technologiích.

– Omezení se na ASCII zaručí co nejmenší komplikace s kompatibilitou při sdílení dat na různých platformách.

• jména souborů, adresy WWW stránek, adresáře SW projektů… • Při pojmenovávání souborů je třeba myslet i na pravidla operačních systémů.

– Nepoužívat mezeru, otazník, hvězdičku, lomítko, dvojtečku … 24

• • •

Národní abecedy

Dle vzoru ASCII vznikaly kódové tabulky národních abeced, které se někdy také nesprávně nazývaly ASCII.

Původně se využívalo jen 7 bitů, takže národní abecedy musely přemapovat některé často užívané znaky původního amerického ASCII.

– Vzniklo tak mnoho nekompatibilních kódování.

Kompatibilní řešení je to, kdy původní ASCII zůstane zachováno a přidají se k němu znaky národních abeced.

– Tabulka národní abecedy by měla 8 bitů.

• K původní ASCII tabulce s prvním bitem z 8 rovným nule se přidá dalších 128 kódů pro národní znaky s prvním bitem z 8 rovným jedné.

25

• • • •

Tvůrci standardů pro kódování znaků

Národní organizace – například ANSI Mezinárodní organizace – například ISO Soukromé firmy – například IBM, Microsoft, Apple – proprietární standardy závislé na platformě (víceméně na určitém operačním systému) Pro stejnou národní abecedu tak může existovat více nekompatibilních kódování.

– Nekompatibilita se projeví, když mezi sebou komunikují různé systémy pracující s odlišným kódováním.

• Například e-mail je zpracován různými servery a různými klientskými programy.

26

• • •

Problémy národních kódování

Moderní software – Vyrábí se pro mnoho národních prostředí.

• lokalizace Šíření informace přes Internet – Když na Internetu začínala služba WWW, byly nutné různé varianty stránek pro různá kódování nebo se požadovaná stránka před jejím zobrazením překódovala nějakým programem.

– V současnosti je kód stránky součástí jejích metadat pro internetový prohlížeč.

Elektronické dokumenty odkudkoliv by mělo být možné číst kdekoliv.

– Software pro jejich zobrazení by měl umět všechna kódování.

27

• • • •

Unicode

Standard pro kódování všech národních abeced v jediné společné tabulce prvně publikován roku 1991 Jeho tvůrce je společnost nejvýznamnější světové firmy z oblasti informačních technologií.

Unicode Consortium sdružující Poskytuje prostor pro více než milión kódů.

Má několik variant.

– UTF-8 má proměnlivou délku kódu .

• V současnosti je to nejpoužívanější kódování pro psaní WWW stránek.

• ASCII znaky jsou kódovány pomocí 8 bitů s nulou na začátku.

– zpětná kompatibilita s ASCII • Ostatní znaky jsou kódovány pomocí 2 až 4 bajtů.

– UTF-32 • má fixní délku kódu .

Kóduje každý znak pomocí 4 bajtů.

• • Reprezentace znaků není efektivní z hlediska potřebné paměti.

Znaky jsou indexovatelné.

– Díky fixní délce kódu je n-tý znak přímo přístupný pomocí n-tého indexu.

– Přístup k n-tému znaku při kódování s proměnlivou délkou musí být sekvenční, je tudíž výpočetně náročnější.

28

• •

Řetězce znaků

vektory (jednorozměrná pole) znaků reprezentující text Mají 2 nejčastější způsoby realizace.

– řetězce ukončené nulou ( null-terminated strings ) • Mohou být libovolně dlouhé (omezeny jen dostupnou pamětí).

– řetězce s předponou určující délku ( length-prefixed strings ).

• Délka je omezená maximálním číslem, které se vejde do fixního počtu bitů určeného pro předponu.

• Řetězec může být binární.

– Binární data mohou kdekoliv obsahovat libovolné hodnoty bajtů.

– Na rozdíl od binárních dat textová data jsou tvořena jen znaky textu. Žádný znak textu nemá kód rovný nule.

• Je-li předpona jiného (zpravidla delšího) datového typu než znak (element textu), je řetězec tvořen jako objekt.

29

• • •

Co je třeba umět do testu

Jaké problémy jsou spojeny s používáním různých kódovacích tabulek pro různé abecedy národních znaků?

– Jak jsou tyto problémy v současnosti řešeny?

Jaké kódování má variabilní délku kódu?

Jak jsou v počítači reprezentovány řetězce?

30