Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO

Rozměr: px
Začít zobrazení ze stránky:

Download "Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO"

Transkript

1 Fakulta elektrotechniky a informatiky Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Garant předmětu: Jaroslav Zdrálek Autor textu: Zdeňka Chmelíková Jaroslav Zdrálek Ostrava 2014 Vznik těchto skript byl podpořen projektem č. CZ.1.07/2.2.00/ Evropského sociálního fondu a státním rozpočtem České republiky.

2 Autor: Název Ing. Zdeňka Chmelíková, Ph.D. doc. Ing. Jaroslav Zdrálek, Ph.D. Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Vydavatel: VŠB technická univerzita Ostrava Fakulta elektrotechniky a informatiky Katedra telekomunikační techniky 17. listopadu 15, Ostrava Vydání první Rok vydání 2014 Náklad elektronicky Vydala: Vysoká škola báňská-technická univerzita Ostrava ISBN CD Tato publikace neprošla redakční ani jazykovou úpravou.

3 Obsah 1. Úvod Základní pojmy Endian Binární prefixy norma IEC Reference Číselné soustavy Polynom číselné soustavy Číselné soustavy používané v číslicových systémech Převod čísel mezi číselnými soustavami Reference Booleova algebra Výroková logika Definice Booleovy algebry Booleovská funkce Booleovské výrazy Reference Návrh Booleovské funkce Logická hradla Syntéza Minimalizace pomocí Karnaughovy mapy Realizace pomocí hradel NAND a NOR Algoritmy minimalizace Reference Reálná čísla Reference Celá čísla Celá čísla bez znaménka VŠB-TU Ostrava iii

4 6.2 Celé číslo se znaménkem Přímý kód Jednotkový doplněk (inverzní kód) Dvojkový doplněk (doplňkový kód) Převod do dvojkového doplňku Převod z dvojkového doplňku Kód s posunutou nulou offset binary Převod z a do kódu s posunutou nulou BCD čísla Desítkový doplněk Reference Aritmetické operace pro celá čísla Příznaky operací (Flag) Znaménkové rozšíření Sčítání čísel bez znaménka a v dvojkovém doplňku Odčítání čísel bez znaménka ve dvojkovém doplňku Sčítání a odčítání v přímém kódu Sčítání a odčítání v binárním posuvu Sčítání a odčítání v BCD kódu Násobení Dělení Reference Aritmetika v pevné řádové čárce Binární měřítko Formát m.n Číselný formát Q Rozsah zobrazení v pevné řádové čárce Převod z a do pevné řádové čárky Aritmetické operace Sčítání a odčítání Násobení Dělení Reference Čísla v pohyblivé řádové čárce VŠB-TU Ostrava iv

5 9.1 Significand Přesnost Hodnoty v pohyblivé řádové čárce Data v pohyblivé řádové čárce Formáty definované standardem IEEE Kódování v binárním interchange formátu Dekadický interchange formát v pohyblivé řádové čárce Declet and densely-packed decimal Zaokrouhlování Nečíselná hodnota NaN Nekonečno Základní výjimky Realizace Reference Aritmetika v pohyblivé řádové čárce Zaokrouhlování Výjimka Závěrečné operace Formát minifloat v pohyblivé řádové čárce Sčítání a odčítání Násobení Dělení Reference Znaky a Unicode Terminologie Fonty Bitmapový font Outline fonty Stroke fonty ASCII Kódové stránky C0 a C1 řídicí kódy Unicode Použití Unicode VŠB-TU Ostrava v

6 11.11 UTF UTF UTF Reference VŠB-TU Ostrava vi

7 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO 1. Úvod Číslicové systémy jsou používány ve velké míře při zpracování výpočtu dat, v řídicích systémech, komunikacích a při různých měřeních. Vzhledem k tomu že číslicové systémy jsou schopny větší přesnosti a spolehlivosti než analogové systémy, je mnoho úkolů, dříve řešených pomocí analogových systémů, v současné době prováděno digitálně. V číslicovém systému, fyzikální veličiny nebo signály pracují pouze s diskrétními hodnotami, zatímco v analogových systémech fyzikální veličiny a signály se mohou průběžně měnit v závislosti na stanoveném rozsahu. Číslicový systém bývá navržen podle teorie digitálního logického obvodu. Každý číslicový systém (přístroj) pracuje s digitálními signály, které nabývají pouze dvou hodnot, typicky 0 nebo 1, [Roth_2004]. Číslicové systémy jsou tvořeny z obvodů, které zpracovávají binárních číslice - 0 a 1. Ve skutečnosti je ale kolem nás velmi málo problémů, které by byly založeny na těchto binárních číslech nebo jakýchkoli číslech vůbec. V důsledku toho je nutné v číslicovém systému vytvořit nějaký vztah mezi binárními číslicemi zpracovávanými v číslicových obvodech a čísly reálného života, událostí či podmínek. Číslicový systém a informační technologie jsou velmi úzce související pojmy. Definice informace je v dnešní době obsáhlá a je obvykle spojena s digitálními daty a číslicovými systémy. Číslicový systém pak můžeme chápat jako systém, který zpracovává a produkuje informace. Typickými představiteli digitálního systému jsou mobilní telefony, digitální televize a rádio, digitální fotografie a videa, a tak dále, [Wakerly_2006]. Digitální systém je také chápán jako kombinace hardwaru a softwaru. Hardware je fyzické a materiální řešení číslicového systému. A hardware zpracovává data nebo informace pomocí algoritmů, které jsou implementovány přímo v hardwaru nebo pomocí napsaných programů. Tyto programy se nazývají také software. Návrh a popis hardwaru se provádí pomocí Booleovské funkce a konečného automatu. Tyto nástroje syntézy se používají k popisu digitálních soustav a jsou vhodnou formou pro jejich realizaci. Je důležité znát formát dat, algoritmus zpracování a také terminologii. 1.1 Základní pojmy Následující pojmy jsou spojeny s číslicovými systémy a je třeba jim správně porozumět a nezaměňovat je. Tyto výrazy se týkají skupin bitů, indexování bitů v rámci skupiny, atd. Bit je základní a zároveň nejnižší jednotka informace v oblasti výpočetní techniky a telekomunikací. Bit nabývá dvou hodnot, které mohou být logické nebo binární, záleží na způsobu použití. Typické hodnoty bitů jsou 0 nebo 1; True nebo False ; plus nebo minus; Low nebo High ; atd. Slovo Bit bylo vytvořeno v roce 1943 J. W. Tukeyem a je zkratkou ze slov binary Bit VŠB-TU Ostrava 1

8 1. Úvod digit. Zkráceně se tato jednotka zapisuje malým písmenem b. Více je uvedeno v literatuře [wiki_0102]. Byte je jednotkou množství dat. Termín byte vytvořen Dr. Werner Buchholz v červenci 1956, během rané fáze návrhu počítače IBM Stretch. Byte se jako jednotka zkráceně zapisuje velkým písmenem B. Byte představuje skupinu 8 bitů, kde každý bit má svou bitovou pozici a váhu. Také to znamená, že byte může nabývat dekadicky hodnot 0 až 255; binárně až ; a hexadecimálně 0x00 až 0xFF, [wiki_0103]. V telekomunikacích je často používán termín oktet. V dnešní době se tento pojem používá už málo a je nahrazován termínem byte, [wiki_0104]. Nibble je skupina 4 bitů, což odpovídá polovině bytu. Nibble je používán k ukládání jedné hexadecimální číslice. Jeden byte má dva nibble nebo dvě hexadecimální číslice. Jeden nibble může nabývat dekadicky hodnot od 0 do 15; binárně 0000 až 1111 a hexadecimálně 0 až F. Více informací je v literatuře [wiki_0105]. Byte Nibble Word (slovo) je skupina bytů. Z hlediska historie mělo slovo různý počet bitů. Skutečný počet bitů ve slově je dán architekturou počítače (velikost registrů, paměti apod.). Velikost slova může být 16, 32 nebo 64 bitů podle architektury procesoru. Více informací je v literatuře [wiki_0106]. Slovo hodnota = a n-1b n-1 + a 1B 1 + a 0B 0 + a -1B -1 + a -mb -m a n-1 a -m MSB LSB Kde B je rovno 2, a je základem binární soustavy Obr Pozice LSB a MSB LSB (Least Significant Bit) představuje koeficient s nejnižší váhou, [wiki_0107]. MSB (Most Significant Bit) je koeficient s nejvyšší váhou, [wiki_0108]. Pojmy LSB a MSB jsou často spojovány s bytem a dokonce i s koeficienty různých číselných soustav. LSB a MSB Preferováno 7 0 MSB LSB 7 0 Změna váhy Změna pozice 0 7 MSB LSB 0 7 LSB MSB LSB MSB VŠB-TU Ostrava 2

9 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Číslování bitů, bitová pozice, indexování bitů je číslo, které určuje pozici bitu nebo koeficientu, obr , [wiki_0109]. Pokud je dána skupina n bitů, pak je preferováno číslování bitů tak, že pozice bitu úplně nalevo má index n-1 a úplně vpravo je index 0. V případě, že skupina představuje celé číslo, pak indexy odpovídají řádu, obr Tento princip indexování není podmínkou a je třeba si uvědomit hodnotu indexu a hodnotu řádu, které nemusí být stejné, obr Endian Endian si můžeme definovat jako způsob ukládání čísel a kódů v paměti počítače, v případě sériových přenosů jako způsob organizace bytů při přenose. Informace s n-bitovou šířkou je rozdělena do menších skupin, tzv. základních jednotek (atomic element). Touto jednotkou bývá zpravidla byte, ale může to být i slovo nebo jiná m-tice. Endian určuje, která základní jednotka (atomic element) je uložena v paměti na nižší adrese či která bude přenášena jako první, atd. Endian má dva principy, které se nazývají Little Endian a Big endian, obr a obr Více informací naleznete v [wiki_0110]. MSB LSB 0x A 0B 0C 0D 0E 0F Základní jednotka je byte a a+1 a+2 a+7 Základní jednotka je slovo 0F a 0E0F 0E 0C0D 0D 0A0B 0C B (ab) 0A a+7 Little endian, LSB základní jednotka je v nejnižší adrese Obr Little endian Základní jednotka je slovo Základní jednotka je byte MSB 0x A 0B 0C 0D 0E 0F LSB a a+3 a A0B 0C0D 0E0F a a+1 a+2 a A 0B 0C 0D 0E 0F Big endian, MSB základní jednotka je na nejnižší adrese. Obr Big endian Little endian je princip, kdy základní jednotka (atomic element) z pozice LSB je uložena do nejnižší adresy nebo má nejnižší index během přenosu, obr Naproti tomu Big endian je princip, kde základní jednotka z pozice MSB je uložena na nejnižší adrese a má nejnižší VŠB-TU Ostrava 3

10 1. Úvod index během přenosu, obr V literatuře se objevují základní mnemotechnické pomůcky, pro Little endian je to little end first a pro Big endian je to big end first, [wiki_0112]. 1.3 Binární prefixy norma IEC Z fyzikálního pohledu je jasné, že předpona kilo znamená 1000 = Naproti tomu počítačoví odborníci vědí, že v oblasti počítačů předpona kilo znamená 1024 = Rozdíl mezi těmito hodnotami je malý, ale pro předpony s vyšším základem se rozdíl značně zvyšuje. V důsledku toho pak hodnoty bytů neodpovídají hodnotě s danou předponou. Typickým příkladem je kapacita disku. Na štítku je uvedena hodnota 500 GB a v počítači se nám objeví kapacita GB. Nebo, přenosová rychlost Ethernetu je 10 Gbit/s a to odpovídá 10 miliardám bitů za sekundu. Toto je způsobeno různou definicí hodnoty pro předpony Giga. Složitější situace se týká 3 1/2 palcové diskety s kapacitou 1,44 MB. Skutečná kapacita je Bytů (1.44 * 10 3 * 2 10 ). Tyto nesrovnalosti řeší Norma IEC , která je v České republice platná od 1. dubna Norma zavádí nové předpony, které jsou odvozeny od základu 2, a proto je nazýváme binární předpony, [wiki_0111]. Binární předpony jsou na obr Binární prefixy Dekadické SI prefixy Binární SI prefixy Symbol Název Základ Základ Základ Základ Symbol Název k kilo ki kibi M mega Mi mebi G giga Gi gibi T tera Ti tebi P peta Pi pebi E exa Ei exbi Z zetta Zi zebi Y yota Yi yobi Obr Dekadické a binární SI prefixy Procvičení 2 16 = 2 6 x 2 10 = 64 ki 2 33 = 2 3 x 2 30 = 8 Gi 2 28 = 2 8 * 2 20 = 256 Mi 2 49 = 2 9 * 2 40 = 512 Ti Binární prefixy - procvičení 2 kibit = 2 x 2 10 = 2 11 = bitů 2 kbit = 2 x 10 3 = bitů 64 Mibit = 2 6 x 2 20 = 2 26 bitů 64 Mbit = 64 x 10 6 = bitů 128 GiB = 2 7 x 2 30 = 2 37 bitů 128 GB = 128 x 10 9 = B VŠB-TU Ostrava 4

11 1 kib = 8 kibit = 8 x 2 10 = 2 3 x 2 10 = 2 13 = bitů Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO 1.4 Reference [Katz_2005] [Roth_2004] Randy H. Katz, Gaetano Borriello: Contemporary Logic Design, Second Edition; Person Prentice Hall 2005; ISBN Charles H. Roth, Jr.: Fundamentals of Logic Design; Thomson, Brooks/Cole 2004; ISBN [Wakerly_2006] John F. Wakerly: Digital Design, Principles and Practice, Fourth Edition; Pearson Practice Hall 2006; ISBN [wiki_0101] Digital data; on line [wiki_0102] Bit; on line [wiki_0103] Byte; on line [wiki_0104] Octet (computing); on line [wiki_0105] Nibble; on line [wiki_0106] [wiki_0107] [wiki_0108] Word (computer architecture); on line Least significant bit; on line Most significant bit; on line [wiki_0109] Bit numbering, on line [wiki_0110] Endianness; on line [wiki_0111] Binary prefix; on line [wiki_0112] Endianita; on line [IEC ] IEC , International Standard, Letter symbols to be used in electrical technology Part 2: Telecommunications and electronics VŠB-TU Ostrava 5

12 2. Číselné soustavy 2. Číselné soustavy Pravěký člověk znázorňoval čísla pomocí dostupných pomůcek prsty, kamínky, zářezy, apod. Některé kmeny v Africe používaly pětkovou soustavu užíváním prstů jedné ruky. Základem takovéto soustavy pak byla 5. Protože člověk má ale dvacet prstů, používala se často dvacítková soustava, kde základem soustavy je 20. Indiáni kmene Mayů ji používali až do 6. století n. l. Sumerové zas používali poziční systém se základem 60. Systém počítání času (den má 24 hodin, každá hodina má 60 minut, každá minuta má 60 sekund) přežil 4 tis. let až dodnes. Za objevitele pozičního systému, který dnes používáme, jsou pokládáni Indové. Nejstarší takovýto číselný systém vznikl v Indii ve 3. stol. př. n. l. a postupně ho pak převzali Arabové a dál se rozšířil do Řecka a do Evropy [Internet_0201], [wiki_0201]. Definice čísla Číslo je uspořádaná množina symbolů (znaků), kterým říkáme číslice. Definice čísla Nejznámější nepoziční zápis čísla je pomocí římských číslic. Příklad: římskému číslu - MDCCLXIV v dekadické soustavě odpovídá číslo Určitým číslům jsou přiřazena písmena: M = 1000; D = 500; C = 100; L = 50; X = 10; V = 5; I = 1. Pravidla psaní pomocí římských číslic jsou uvedeny v [Interent_0202], [wiki_0202]. Dalším, méně známým, nepozičním zápisem je Greyův kód. Nepoziční zápis Dekadická číselná soustava Binární číselná soustava Oktální číselná soustava A B C D E F Obr Číslice a řády v číselných soustavách Hexadecimální číselná soustava VŠB-TU Ostrava 6

13 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Poziční vyjádření čísel představuje řetězec znaků, kde každý znak má svou pozici v řetězci určenou pomocí odpovídající váhy, [wiki_0203]. Hodnota čísla je pak dána součtem vážených číslic, například v desítkové soustavě můžeme číslo 2568 rozložit pomocí váhy takto: Poziční zápis 2568 = 2x x x x10 0. Každá váha je dána řádem čísla 10 a odpovídá určité pozici číslice v řetězci. Desetinná tečka umožňuje použít i záporné číslo řádu, například 0.39 lze pomocí váhy rozložit takto: 0.39 = 3x x10-2. Poziční zápis čísla znamená, že pokud se na určité pozici vyčerpají všechny číslice dané číselné soustavy, přidává se další vyšší řád. Tento princip je znázorněn na obr pro binární, osmičkovou a šestnáctkovou číselnou soustavu. Tyto přidané řády jsou označeny žlutou barvou. V následujícím textu jsou používány různé číselné soustavy. Pro správnou interpretaci je u každého čísla uveden základ soustavy. Na obr jsou uvedeny možné zápisy čísel v nejčastěji používaných číselných soustavách. Literatura Zápis v programovacích jazycích Soustava Language C Jiné jazyky B 2#1011 B 1011 Binární O 013 8#13 Oktální D D 11 Dekadická B 16 BH 0x10 X 1A1F Hexadecimální (1011) 2 0b1011 B1100 2#1010 Binární (11) 10 0d11 11 D11 10#11 Dekadická (B) 16 0hB 0xb HC 16#C Hexadecimální Obr Zápis čísla v základu dané číselné soustavy 2.1 Polynom číselné soustavy Obecně platí, že každé číslo vyjádřené v pozičním systému představuje řetězec číslic nebo koeficientů ve tvaru a n-1a n-2 a 1a 0.a -1a -2 a -m. A lze tak každé číslo zapsat pomocí polynomu, viz rovnice (0201), [wiki_0201]. Tomuto polynomu se někdy také říká Hornerovo schéma. N R = (a n 1 R n a 2 R 2 + a 1 R 1 + a 0 R 0 + a 1 R 1 + a 2 R a m R m ) = Kde = n 1 m a i R i (0201) N R je číslo vyjádřené v číselné soustavě o základu, R. a i jsou číslice (koeficienty) na jednotlivých řádových místech v rozsahu od 0 do R-1. R je základ číselné soustavy, je to číslo celé kladné R > 1. i je řád (exponent), který vyjadřuje pozici koeficientu (i= 0,1, n) R i je váha a i je řád VŠB-TU Ostrava 7

14 2. Číselné soustavy R i představuje váhu n udává počet celočíselných míst, n-1 udává nejvyšší řád celé části daného čísla a je umístěna na pozici nejvíce vlevo a nazývá se nejvýznamnější bit MSB (Most Significant Bit), [Wakerly_2006] m udává počet desetinných míst, kde (-m) představuje index nejnižšího řádu zlomkové části daného čísla a je umístěn na pozici nejvíce vpravo a nazývá se nejméně významný bit LSB (Least Significant Bit), [Wakerly_2006] Se zavedením pojmu reálné číslo souvisí další pojmy, viz obr Reálné číslo má dvě základní části, celou a desetinnou část, které jsou odděleny desetinnou tečkou. Pojem desetinná tečka je v této knize preferována před pojmem desetinná čárka z důvodu nezávislosti na typu číselné soustavy, [wiki_0204]. Celá a desetinná část je dána rovnicemi (0202) a (0203). MSB - nejvýznamnější bit LSB nejméně významný bit Kde N I = (a n-1a n-2 a 2a 1a 0) R = a n-1r n-1 + a n-2r n-2 + a 2R 2 + a 1R 1 + a 0R 0 (0202) N F = (0. a -1a -2a -3...a -m) R = a -1R -1 + a -2R -2 + a -3R -3 + a -mr -m (0203) N I je celá část reálného čísla. N F je desetinná část reálného čísla. a i je číslice reálného čísla. R je základ číselné soustavy. n je počet číslic v celé části. m je počet číslic zlomkové části.. červená tečka představuje desetinnou tečku. Celá a desetinná část čísla Radix číselné soustavy - R Radix tečka Celá část Desetinná část Nejvýznamnější číslice (MSB) Nejméně významná číslice (LSB) Obr Pojmy související s reálným číslem Číslice, která je umístěna v levé krajní pozici se nazývá nejvýznamnější číslice a číslice v pravé krajní pozici je nazývána nejméně významná číslice. V situaci, kdy číslo nemá desetinnou část, nejméně významné číslice je na pozici s váhou R 0. Poznámka k základu číselné soustavy Základem číselné soustavy může být libovolné celé kladné číslo větší než 1. VŠB-TU Ostrava 8

15 Poznámka k základu číselné soustavy Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Pro základ číselné soustavy se také požívá pojem radix a pro desetinou tečku také pojem radix tečka. 2.2 Číselné soustavy používané v číslicových systémech Pro číslicové systémy je nejpřirozenější číselnou soustavou - soustava binární. V těchto systémech se také můžeme setkat se soustavami osmičkovou a šestnáctkovou, které se vyžívají především pro zkrácení zápisu binárního čísla. Desítková číselná soustava se v digitálních systémech využívá sporadicky. Výpočty se potom provádějí pomocí kódů na binární aritmetice. Nejznámějším kódem je BCD kód. Nejrozšířenější číselnou soustavou je desítková soustava. Základem této soustavy je číslo 10 (R = 10) a potom čísla v této soustavě se označují například indexem D nebo přímo hodnotou 10. Tato číselná soustava používá číslice 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, kdy jednotky některých řádů mají speciální názvy: 10 - deset, sto, tisíc, milión, miliarda, bilión atd. Každé číslo v desítkové soustavě lze zapsat pomocí rovnice (0201). Například číslo 3725 můžeme rozepsat pomocí polynomu: Desítková číselná soustava (3725) D = V číslicových systémech je především používaná dvojková číselná soustava. Základem této soustavy je číslo 2 (R = 2) a čísla v této soustavě označují písmenem B. Binární soustava používá pouze číslice 0, 1. Každé číslo v binární soustavě lze zapsat pomocí polynomu (0201). Například číslo můžeme rozepsat: Dvojková číselná soustava ( ) B = Zápisu čísla v šestnáctkové soustavě se s výhodou používá pro zkrácení dlouhého binárního čísla. Základem této soustavy je číslo 16 (R = 16) a potom čísla v této soustavě se označují písmenem H. Tato soustava používá číslice 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 a písmena pro zbývající hodnoty A, B, C, D, E, F (kde A = 10; B = 11; C = 12; D = 13; E = 14; F = 15). Každé číslo v šestnáctkové soustavě lze zapsat pomocí polynomu: Šestnáctková číselná soustava (35A1) H = Osmičková soustava je v dnešní době jen velmi málo využívána, a také slouží především ke zkracování zápisu binárního čísla. Základem této soustavy je číslo 8 (R = 8) a potom čísla v této soustavě se označují písmenem O. Tato soustava využívá číslice 0, 1, 2, 3, 4, 5, 6, 7. Každé číslo v oktální soustavě lze zapsat pomocí polynomu: Osmičková číselná soustava (572) O = Převod čísel mezi číselnými soustavami Pro převod čísel mezi různými číselnými soustavami je třeba mít znalosti aritmetiky dané soustavy a je třeba si uvědomit, že je zcela jiná než v desítkové soustavě. Převody mezi jakýmikoli Převod do desítkové soustavy VŠB-TU Ostrava 9

16 2. Číselné soustavy číselnými soustavami jsou dány algoritmy, které budou dále popsány. K převodu do desítkové soustavy slouží polynom daný vztahem (0201). Praktické využití polynomu je: = ( = ) = B = ( = ) = 54.25D = ( = ) = D4C.B 16 = ( = ) = x2AF8 = ( = ) = 0d11000 Převod z desítkové do jakékoli jiné soustavy se provádí zvlášť pro celou a zvlášť pro desetinnou část reálného čísla. Při převodu vycházíme ze vztahů (0202) a (0203). Pro celou část použijeme metodu postupného dělení a pro desetinnou část použijeme metodu postupného násobení. Příklad převodu celého čísla je uveden na obr Algoritmus je: Převáděné číslo dělíme základem nové soustavy R, výsledkem bude podíl Q 0 a zbytek a 0. Q 0 = N/R = a n-1r n-2 + a n-2r n-3 + a 2R 1 + a 1R 0 a zbytek a 0. Dalším krokem je dělení podílu Q 0 základem nové soustavy R, výsledkem bude podíl Q 1 a zbytek a 1. Q 1 = Q 0/R = a n-1r n-3 + a n-2r n-4 + a 2R 0 a zbytek a 1. Pokračujeme tak dlouho, dokud podíl nebude roven nule a zbytek a n-1. Q n-1 = Q n-2/r = 0 a zbytek a n-1. Poziční zápis čísla v nové soustavě získáme tak, že napíšeme všechny zbytky v tomto pořadí od a n-1, a n-2 a 1a 0. Algoritmus pro převod celý h čísel Řešení: Převeďte desítkové číslo (527) 10 do soustavy o základu R = 7 527/7 = 75 a zbytek a0 je 2, nejméně významná číslice. 75/7 = 10 a zbytek a1 je 5. 10/7 1 a zbytek a2 je 3. 1/7 = 0 a zbytek a3 je 1, nejvýznamnější číslice. Výsledek: = Obr Převod celého desítkového čísla do soustavy o základu 7 Při převodu zlomkové části použijeme metodu postupného násobení základem nové soustavy R. V této metodě násobíme pouze desetinnou část převáděného čísla N F. Příklad převodu desetinného čísla je uveden na obr Algoritmus je: Výsledkem prvního násobení je číslo P -1 = N F * R = a -1.a -2a -3 a -m., které rozdělíme na celou část a -1 a novou desetinnou část N F-1 = 0.a -2a -3 a -m. Tato nová desetinná část N F je opět násobena základem nové soustavy R, výsledkem je pak P -2 = N F-1 * R = a -2.a -3 a -m, který je znovu rozdělen na celou část a -2 a novou desetinnou část N F-2 = 0.a -3 a -m. VŠB-TU Ostrava 10

17 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Násobení se provádí, dokud není výsledek nulový nebo pokud jsme nedosáhli požadované přesnosti na počet desetinných míst. Převeďte dekadické číslo (0.367) 10 do soustavy o základu R = 16 s přesností 16 bitů. Řešení: * 16 = 5.872; pouze celá část v uvedeném výsledku představuje první číslici nového čísla, a -1 = * 16 = ; celá část výsledku je a -2 = = 0xD * 16 = ; celá část výsledku je a -3 = = 0xF * 16 = 3.712; celá část výsledku je a -4 = 3. Výsledek: (0.367) D = (0.5DF3) H Obr Převod desetinného dekadického čísla do soustavy o základu 16 Postup při převodu binárních čísel do osmičkové a šestnáctkové soustavy je jednoduchý. Binární číslo je rozděleno do skupin od desetinné tečky vlevo i vpravo (pokud převádím desetinné číslo). Tyto skupiny jsou tvořeny 3 bity pro převod do oktální soustavy a 4 bity pro převod do hexadecimální soustavy. Poté je každá skupina vyjádřena pomocí oktální nebo hexadecimální číslice. V případě, kdy převáděné číslo není možné rozdělit do skupin po třech či čtyřech bitech, přidáváme před nebo za číslo potřebný počet nul. Pak, například číslo se rovná CB9.E16. Základní myšlenka převodu je znázorněna v obr Převod mezi binární a oktální nebo hexadecimální soust Převod na oktální číslo d Oktální číslo Skupina 3 bitů Binární číslo Skupina 4 bitů Převod na hexadecimální číslo c353d.b50c Hexadecimální číslo Obr Převod mezi binární, oktální a hexadecimální číselnou soustavou Všechna čísla od 0 po 15 je možné zapsat jako součet čísel 8, 4, 2, 1, tímto způsobem můžeme rychle převádět čísla z dekadické do binární soustavy a zpět. Čísla a 1 představují váhy binární soustavy a odpovídají mocninám 2 (2 3, 2 2, 2 1 a 2 0 ). Tyto exponenty odpovídají řádům Princip VŠB-TU Ostrava 11

18 2. Číselné soustavy binární soustavy. Například dekadické číslo 11 je součtem čísel 8, 2 a 1. To znamená, že binární číslo v řádech 3, 1 a 0 obsahuje jedničku. Pak je rovno Obr ukazuje různé příklady. Procvičení Váhy 8 (=2 3 ) 4 (=2 2 ) 2 (=2 1 ) 1 (=2 0 ) Dekadické číslo Obr Příklady principu 8, 4, 2 a 1 Rozložte zadaná čísla pomocí vah dané soustavy 1) ( ) 10 = ) ( ) 6 = ) (372.52) 8 = ) (42.3) 5 = ) (3DA1.2B) 16 = Příklady k procvičení: Odpovídající binární číslo a) Převeďte číslo 179 (10) do dvojkové soustavy. (Výsledek: = ) b) Převeďte číslo 179 (10) do pětkové soustavy. (Výsledek: =1204 5) c) Převeďte číslo 50 (10) do osmičkové soustavy. (Výsledek: 50 (10) = 62 8) d) Převeďte číslo 527 (10) do šestnáctkové soustavy. (Výsledek: 527 (10) = 20F 16) e) Převeďte číslo 493 (10) do šestnáctkové soustavy. (Výsledek: 493 D = 1ED H) f) Převeďte číslo do dvojkové a osmičkové soustavy. Výsledek: = = 0.1 8) g) Převeďte číslo do pětkové a šestnáctkové soustavy s přesností na 4 desetinná místa. (Výsledek: = = (0.5DF3) H h) Převeďte zadané číslo do pětkové soustavy: ( ) 10 = ( ) 10. (Výsledek: = i) Převeďte výsledek z předchozího příkladu zpět do desítkové soustavy: j) ( ) 5 = 4* *5 1 +4* * * * *5-4 = k) Převeďte číslo do osmičkové soustavy. (Výsledek: = ) l) Převeďte číslo 725, do dvojkové a osmičkové soustavy s přesností na 3 bity. (Výsledek: 725,25 10 = = ) VŠB-TU Ostrava 12

19 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO m) Převeďte číslo do šestnáctkové soustavy. (Výsledek: = CB9 16) n) Převeďte číslo do osmičkové soustavy. (Výsledek: =32 8) o) Převeďte číslo do šestnáctkové soustavy. (Výsledek: =1A 16) p) Převeďte číslo do osmičkové soustavy. (Výsledek: = ) q) Převeďte číslo do šestnáctkové soustavy. (Výsledek: = 1C.4 16) r) Převeďte číslo do dvojkové soustavy. (Výsledek: = ) s) Převeďte číslo A97.E8 16 do dvojkové soustavy. (Výsledek: A97.E8 16 = ) 2.4 Reference [Internet_0201] ČÍSELNÉ SOUSTAVY; on line ] [Internet_0202] Římská čísla; on line [Wakerly_2006] John F. Wakerly: Digital Design, Principles and Practice, Fourth Edition; Pearson Practice Hall 2006; ISBN [wiki_0201] [wiki_0202] [wiki_0203] Numeral system; on line Roman numerals; on line Positional notation; on line [wiki_0204] Decimal mark; on line VŠB-TU Ostrava 13

20 3. Booleova algebra 3. Booleova algebra Booleova algebra je základním matematickým nástrojem pro analýzu a syntézu logických obvodů ve všech typech. Než se pustíme do teorie Booleovy algebry, budeme se nejdříve zabývat otázkou: Co je to logika? Logika je věda zabývající se pravdivostí, prokazatelností, vyvratitelností a příčinou. V logice jde o jistou formu komunikace, ne o psychologický výklad. 3.1 Výroková logika Výrok je argument nebo výraz, který dává smysl a o kterém je možné rozhodnout, zda je pravdivý či ne. Matematická logika obvykle pracuje se souborem výrokových spojek. Základní spojky jsou přehledně uvedené v tabulce Výroková logika Název Symbol Čtení Zápis Negace Není pravda, že p Konjunkce AND (a zároveň) p q Disjunkce OR (nebo) p q Implikace jestliže, pak. p q Ekvivalence právě tehdy, když p q Tabulka Přehled základních spojek výrokové logiky Použitím výrokových symbolů a výrokových spojek můžeme sestavit kompletní výrok, který budeme nazývat tvrzení (v symbolickém jazyce mu také říkáme formule). Pro každé tvrzení výrokové logiky, můžeme sestavit pravdivostní tabulku, kde mohou být pravdivá tvrzení, označena jako pravda (Ano, 1, True, On, atd.) a nepravdivá tvrzení, označená jako nepravda (Ne, 0, False, Off, atd.). Symboly p, q představují výrokové proměnné, kterými se označují jednotlivá tvrzení ve výroku. V tabulce je sestavena pravdivostní tabulka pro každý typ tvrzení. Tvrzení, formule p q p p q p q p q p q Tabulka Pravdivostní tabulka pro každý typ tvrzení Příklad 1. Máme kbelík s vodou. A musíme se rozhodnout, kdy poteče voda z vodovodu. Existují dva případy. VŠB-TU Ostrava 14

21 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO a) V prvním případě stačí, když je otevřen aspoň jeden z kohoutků Tap 1, Tap 2 a voda poteče. Tato situace je znázorněna na obr , včetně odpovídající pravdivostní tabulky. b) Ve druhém případě voda poteče, pokud oba kohoutky Tap 1 i Tap 2 budou otevřeny. Tato situace je znázorněna na obr , včetně odpovídající pravdivostní tabulky. Tap 1 Tap 2 Tap1 Tap2 Teče Ne Ne Ne Ne Ano Ano Ano Ne Ano Ano Ano Ano Obr Příklad disjunkce Tap 1 V Tap 2 Logický součet Tap 1 Tap 2 Tap1 Tap2 Teče Ne Ne Ne Ne Ano Ne Ano Ne Ne Ano Ano Ano Logický součin Obr Příklad konjunkce Tap1 Tap 2 Příklad 2. Máme elektrický obvod, viz obr Žárovka je připojena pomocí spínače a pak svítí nebo je odpojena a nesvítí. Tzn., že když je spínač zapnut, žárovka svítí. (Pozn. v tomto případě se nezabýváme úrovní napětí či proudu.). Opět mohou nastat dva případy. Spínač Žárovka Obr Příklad elektrického obvodu a) Sériové zapojení. V tomto případě žárovka bude svítit, když oba spínače (A, B) budou ve stavu zapnuto (On), v opačném případě, kdy aspoň jeden ze spínačů je ve stavu vypnuto (Off), žárovka nesvítí, viz obr Logický výraz k tomuto příkladu bude znít: žárovka svítí, když spínač A a zároveň spínač B jsou ve stavu On. VŠB-TU Ostrava 15

22 3. Booleova algebra A B A B Žárovka svítí Off Off Ne Off On Ne On Off Ne On On Ano Obr Sériové zapojení spínačů Logický součin b) Paralelní zapojení. V tomto případě žárovka bude svítit, když aspoň jeden ze spínačů (A, B) bude ve stavu zapnuto (On). Pokud oba spínače (A, B) budou ve stavu vypnuto (Off), viz obr žárovka nebude svítit. Logický výraz k tomuto příkladu bude znít: žárovka svítí, když spínač A nebo spínač B jsou ve stavu on. A B A B Žárovka svítí Off Off Ne Off On Ano On Off Ano On On Ano Logický součet Obr Paralelní zapojení spínačů Příklad 3: Sestavte pravdivostní tabulku pro pravdivé hodnoty této výrokové formule: [((y x) x y)]. K řešení využijte pravdivostní tabulku uvedenou v tabulce x y x y x x y ((y x) x y) Tabulka Pravdivostní tabulka pro příklad 3 Příklad 4: Následující věty převeďte do výrokového počtu: a) Jestliže prší a já si vezmu pláštěnku, nezmoknu. Řešení: nejdříve si označme výroky: A = prší; B = vezmu si pláštěnku; C = nezmoknu; Pak výroky odpovídají tomuto zápisu: (A B) C Řečeno pomocí výrokových spojek: jestliže prší a zároveň si vezmu pláštěnku, pak nezmoknu. VŠB-TU Ostrava 16

23 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO b) Není pravda, že Honza hraje na kytaru i klavír. Honza nehraje na kytaru. Řešení: nejdříve si označme výroky: A = Honza hraje na kytaru; B = Honza hraje na klavír; Pak výroky odpovídají tomuto zápisu: [ (A B) ( A)] Řečeno pomocí výrokových spojek: Není pravda, že Patrik hraje na kytaru a zároveň i na klavír. Patrik zároveň nehraje na kytaru. George Boole ( ) byl anglický matematik a zakladatel matematické logiky. Zpočátku pracoval jako učitel v Anglii a od roku 1849 až do své smrti byl profesorem matematiky na Queen's University, Cork, Irsko. Jeho nejslavnější díla jsou: Mathematical Analysis of Logic (1847), An Investigation into the Laws of Thought, on Which are Founded the Mathematical Theories of Logic and Probabilities (1854). Obě práce jsou v oblasti matematické teorie logiky, kde chtěl dokázat, že jeho chápání matematiky nabízí možnosti řešení logických problémů. Boole jako první zavedl logické vztahy v algebraických rovnicích. 3.2 Definice Booleovy algebry Booleova algebra je základní matematika potřebná pro studium návrhu logických digitálních systémů. Booleova algebra má širokou škálu použití, my se omezíme na její aplikaci v kombinačních a sekvenčních obvodech. Budeme dále tedy využívat tu část Booleovy algebry, která předpokládá, že všechny proměnné nabývají pouze dvou hodnot. Například: Pravda/Nepravda; Ano/Ne; H_level/ L_level; 1/0; Open/Close; On/Off; True/False. apod., [Roth_2004]. Booleova algebra definuje základní tři operace: Sčítání (logická konjunkce, logický součin). Základní zápis je +. Násobení (logická konjunkce, logický součin). Základní zápis je. Tento symbol je často v zápise vynechán a obvykle se uvádí AB místo A B. Negace je unární operace. Základní zápis je, také se v literatuře uvádí. Booleova algebra Binární operace Unární operace Booleova algebra představuje soubor pravidel (axiomy a teorémy) pro zápis a vyhodnocování logických vztahů. Tato algebra kromě výše uvedených operací používá i logické proměnné, které také nabývají pouze dvou hodnot. V Booleově algebře platí princip duality, tzn. axiomy a teorémy jsou vyjádřeny v páru. Dualita značí, že logické hodnoty 0 a 1 se zaměňují a současně operace násobení a součtu se také zaměňují. Příklad: Záměna 0 1 Záměna + a b + a b = a (a + b) (a + b ) = a a + 1 = 1 a 0 = 0 Booleova algebra splňuje princip duality. VŠB-TU Ostrava 17

24 3. Booleova algebra Booleova algebra je v literatuře definována různě, [wiki_0301]. Následující definice se opírá o axiomy a z nich odvozených teorémů, které mají své názvy, [Wakerly_2006], [Roth_2004]. Definice Booleovy algebry používá pojem prvek, pod kterým se může skrývat hodnota, proměnná či celý výraz. Booleova algebra je šestice prvků, která obsahuje množinu A, binární operaci (AND), binární operaci + (OR), unární operace (not, doplněk) a dva prvky 0 a 1. Pro takovouto šestici prvků platí následující axiomy. (A1) a = 0 když a 1 (A1D) a = 1 když a 0 (A2) když a = 0 pak a = 1 (A2D) když a = 1 pak a = 0 Definice Booleovy algebry Axiomy Booleovy algebry (A3) 0 0 = 0 (A3D) = 1 (A4) 1 1 = 1 (A4D) = 0 (A5) 0 1 = 1 0 = 0 (A5D) = = 1 Poznámka k axiomům, teorémům a prvkům Axiom je tvrzení, které nelze dokázat. Teorém je tvrzení, které se dokazuje, v tomto případě na základě axiomů. Prvky množiny A jsou proměnné nebo výrazy. Názvy teorémů Duální teorémy Identita (T1) a + 0 = a (T1D) a 1 = a Agresivita (T2) a + 1 = 1 (T2D) a 0 = 0 Idempotence (T3) a + a = a (T3D) a a = a Negace (T4) a + a = 1 (T4D) a a = 0 Dvojí negace (T5) (a ) = a Komutativita (T6) a + b = b + a (T6D) a b = b a Asociativita (T7) (a + b) + c = a + (b + c) (T7D) (a b) c = a (b c) Distributivita (T8) a b + a c = a (b + c) (T8D) (a + b) (a + c) = a + b c Absorpce (T9) a + a b = a (T9D) a (a + b) = a Rozšíř. absorpce (T10) a b + a b = a (T10D) (a + b) (a + b ) = a Konsensus Idempotence (T11) a b + a c + b c = a b + a c (T12) a + a + a +. + a = a (T11D) (a + b) (a + c) (b + c) = (a + b) (a + c) (T12D) a a a. a = a De Morgan (T13) (a b) = a + b (T13D) (a + b) = a b (T14) (a b c d...) = a + b + c + d +.. Teorémy Booleovy algebry (T14D) (a + b + c + d +..) = a b c d.. VŠB-TU Ostrava 18

25 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Teorémy T13 a T14 se nazývají De Morganová pravidla. Tato pravidla slouží k převodu logického součtu na logický součin a opačně. De Morganova pravidla je možné vyjádřit větami: De Morganova pravidla negace logického součinu je logickým součtem negací. negace logického součtu je logickým součinem negací. Augustus De Morgan ( ) Byl skotský matematik a logik. Narodil se v Indii, vystudoval univerzitu v Cambridgi, působil převážně v Londýně. Je autorem řady prací z algebry, matematické analýzy, teorie pravděpodobnosti, především je však jedním ze zakladatelů formální algebry. V roce 1847 uveřejnil práci Formal Logic, or the Calculus of Inference, Necessary and Probable, v níž jistým způsobem předběhl G. Booleho. Důkaz De Morganových pravidel je v následující tabulce a b A + b (a + b) a b a. b (a b) a + b Tabulka Důkaz De Morganových pravidel Na obr , obr a obr jsou znázorněny aplikace axiomů a teorémů pro minimalizaci výrazů. Přitom na obr a obr je představeno použití teorémů T8 and T8D v disjunktivní a konjunktivní formě. A obr vysvětluje aplikaci De Morganových pravidel pro zjednodušení booleovského výrazu. ab + abc d + abde + a bc e + a b c e = Teorém T8 Teorém T8 = ab (1 + c d + de ) + a c e (b + b ) = Teorém T2 = ab (1) + a c e (1) = Teorém T1D Teorém T4 = ab + a c e Obr Aplikace booleových axiomů a teorémů - I VŠB-TU Ostrava 19

26 3. Booleova algebra (a + b + c) (a + b + d) (a + d ) (a + b ) (a + b + c ) = T8D T1 = (a + b + c) (a + b + d) (a + b + d ) (a + b + d ) (a + b + 0) (a + b + c ) = T8D = (a + b + c) (a + b + dd ) T8D (a + b + d.0) (a + b + c ) = T4D T4D = (a + b + c) (a + b + 0) (a + b + 0) (a + b + c ) = T1 T1 = (a + b + c) (a + b) (a + b ) (a + b + c ) = (a + b) (a + b ) = a T8D, T2D, T1 T8D, T2D, T1 T8D, T4D, T1 Obr Aplikace booleových axiomů a teorémů - II T8, T2, T1D (a + b + c) (a + b + d) (a + d ) (a + b ) (a + b + c ) = T5 = (((a + b + c) (a + b + d) (a + d ) (a + b ) (a + b + c )) ) = T14D De Morganovo pravidlo = ((a + b + c) + (a + b + d) + (a + d ) + (a + b ) + (a + b + c ) ) = = (a b c + a b d + a d + a b + a bc) = T10 T1D = (a b c + a b d + a b d + a bd + a b.1 + a bc) = T8 T8 = (a b c + a b (d + d) + a b(d + 1) + a bc) = T4, T1D T2, T1D = (a b c + a b + a b + a bc) = (a b + a b) = (a ) = a T8, T2, T1D T8, T4, T1D T5 T13D De Morganovo pravidlo Obr Aplikace booleových axiomů a teorémů - III Příklady k procvičení: Příklad 1. Zjednodušte následující výrazy pomocí Booleovy algebry: a) (((a+b) +c) +d) = (postupně budeme odstraňovat negace, začneme od horní negace a použijme teorém T13D) = ((a+b) +c) d = ((a+b) +c)d = (a b +c)d = a b d +cd b) BC+BC +BC D +A BD +ABD = (Výsledek: B) c) A C+AC+B CD +(A+C +D ) + A +CD = (Výsledek: A+C) d) AD +AD+(A +C+D) +ABD +ACD = (Výsledek: A) VŠB-TU Ostrava 20

27 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO e) A(B+C) + ABC = (Výsledek: A(B+C)) f) A(A+B)+A (B +A ) = (Výsledek: 1) g) A B C+A BC +A BC+AB C +AB C+ABC +ABC = (Výsledek: A+B+C) h) (A +B ) (A B) +(A +B )A B = (Výsledek: B) i) ((A +B ) (A B+AB ) +(A +B )(A B+AB )) (Výsledek: A B ) Příklad 2. Zjednodušte následující výrazy pomocí konsensu (T11 a T11D): a) ab + a c = bc b) abd + b de = ade c) ab d + a bd = 0 d) a b + ac + bc + b c + ab = (konsensus a b a ac je b c, to znamená, že výraz b c může být odstraněn; konsensus ac a bc je ab, to znamená, že výraz a.b může být odstraněn;) = a b + ac + bc e) A BC + BCD + A BD (Výsledek: A BC + BCD) f) A C D + A BD + BCD + ABC + ACD (Výsledek: A C D + BCD + ACD ) Poznámka k výrazům, rovnicím a příkazům. Výraz je jakákoliv kombinace proměnných, logických hodnot a operací, například a b + c, a nejjednodušší výraz jako 0, 1, a, a U rovnice je hodnota na levé straně rovna hodnotě na pravé straně, například z = a, Decode = (a + b ) c + a d 0 = 3x - 1 Příkaz je součást programovacího jazyka. Jde o typické přiřazení hodnoty výrazu na pravé straně do proměnné na straně levé. Mnoho programovacích jazyků používá pro operaci přiřazení tento znak (=). V jazyce C, příkaz z = a je čten jako a přiřazeno do z ; například: Jazyk C: jazyk VHDL: X = 1; X := 1 ; z = a; Z <= a; Y = a && b c; Y := a AND b OR c; READY = a!b; READY:= a OR not b; 3.3 Booleovská funkce Booleovská funkce je obdobně definovaná jako matematická funkce. Pouze pracuje se vstupními proměnnými, které nabývají logické hodnoty. Booleovská funkce je základní popis kombinačního logického obvodu a s ní se odvozují všechny následné kroky pro navrhování obvodů a čipů pro digitální počítače, [wiki_0302]. Úplná booleovská funkce je zobrazení definičního oboru do oboru hodnot: Úplná Booleovská funkce f: {0, 1} n {0, 1} (0301) kde VŠB-TU Ostrava 21

28 3. Booleova algebra {0, 1} n je definiční obor, kde n je počet vstupních proměnných. {0, 1} je obor hodnot. Definiční obor Definičním oborem je tedy množina všech kombinací hodnot proměnných se symboly 0, 1. Těchto kombinací je 2 n a představují n-tici o délce n. Obor hodnot má délku 1; proto výstup booleovské funkce je roven 0 nebo 1. Obor hodnot a b c f Obr Booleovská funkce pro 3 proměnné Pravdivostní tabulka je jednoznačným popisem Booleovské funkce Základním způsobem zobrazení booleovské funkce je pravdivostní tabulka [wiki_0304]. Definiční obor obsahuje 2 n kombinací vstupních hodnot pro n proměnných, a proto také pravdivostní tabulka má 2 n řádků. Každé kombinaci vstupní proměnných je přiřazena výstupní hodnota booleovské funkce. Pouze pravdivostní tabulka popisuje booleovskou funkci jasně a jednoznačně. Na obr je v pravdivostní tabulce zapsána booleovská funkce pro 3 proměnné a jí odpovídající zobrazení je f: {0, 1} 3 {0, 1}. Pravdivostní tabulka Pokud booleovské funkci odpovídá zobrazení f: {0, 1} 2 {0, 1}. Kde definiční obor představuje 4 vektory o délce 2. Odpovídající všechny 4 n-tice jsou: {0, 1} 2 = {0, 0}; {0, 1}; {1, 0}; {1, 1}. Neúplná booleovská funkce může mít na výstupu tři hodnoty: 0, 1 a X. Hodnota X se nazývá nezáleží don t care. Tato hodnota se přiřazuje výstupu hlavně v situacích, kdy vstupní kombinace nemůže vůbec nastat. Neúplná Booleovská funkce je potom zobrazení: Neúplná Booleovská funkce Kde f: {0, 1} n {0, 1, X} (0302) X don t care, nezáleží {0, 1} n je definiční obor. {0, 1, X} obor hodnot. X je hodnota, na které nezáleží. Hodnota, na které nezáleží - X je přínosem pro syntézu Booleovské funkce, kdy za tuto hodnotu je možné dosadit logickou 0 nebo 1. Příklad neúplné booleovské funkce je uveden v obr I když hodnota nezáleží je definovaná v neúplné Booleovské funkci pouze pro výstup, v praxi se dost často setkáváme s jejím použitím i na vstupu Booleovské funkce. V tabulce je přidán ještě jeden sloupec, kde se uvádí očíslování kombinace vstupních proměnných. Toto číslo je dáno převodem binárního čísla do dekadické formy. Tomuto číslu se také říká index a umožňuje nám lepší orientaci v pravdivostní tabulce. VŠB-TU Ostrava 22

29 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Číslo x 1 x 0 f X X Číslo x 2 x 1 x 0 f 0 a X 0 2 a X a X 1 Obr Neúplná Booleovská funkce a její modifikace Pro dvě vstupní proměnné existují čtyři možné kombinace hodnot 0 a 1, ke kterým lze přiřadit 16 různých Booleovských funkcí, viz obr V praxi jsou používány jen funkce označené žlutou barvou. Pro n proměnných je možné definovat 2 2n výstupních funkcí, rovnice (0303). Kde Celkový počet funkcí = 2 2n (0303) n je počet vstupních proměnných. x y f 0 f 1 f 2 f 3 f 4 f 5 f 6 f 7 f 8 f 9 f 10 f 11 f 12 f 13 f 14 f Název funkce zero x and y Not(x implies y) x Not(y implies x) y x y (x xor y) x or y Not (x or y) x = y (x xnor y) not y y implies x not x x implies y Not (x and y) One 3.4 Booleovské výrazy Obr Všechny funkce pro 2 proměnné Informace obsažené v pravdivostní tabulce je možné vyjádřit i algebraicky. Booleovský výraz je základem pro navrhování logického kombinačního obvodu. Dále si vysvětlíme některé pojmy, které se k nim vztahují: Proměnná (nebo negace proměnné) je název prvku, ve většině případů je názvem písmeno abecedy, může být i slovo či symbol, například: a 1, a 1, x 1, y 1, z 1, Tap1, Součinový term je logický součin dvou nebo více proměnných, proměnná může být i samostatně se vyskytující, například: x y z', Y' Z X ', z, Součtový term je logický součet dvou nebo více proměnných, proměnná může být i samostatně se vyskytující, například: a, x + y + z, X '+ Y, VŠB-TU Ostrava 23

30 3. Booleova algebra Normální term součinový nebo součtový term, ve kterém se každá proměnná objeví pouze jednou. Minterm minterm je normální součinový term s n proměnnými. Pro n proměnných existuje 2 n součinových termů. Pro jednu kombinaci vstupních hodnot proměnných je minterm roven 1. Pro zbývající kombinace je pak roven 0, obr Pro danou kombinaci vstupních proměnných zapíšeme minterm tak, že pokud proměnná nabývá hodnoty 0, vypíšeme její negaci a pokud je rovna 1, vypíšeme ji v přímém tvaru, viz obr Minterm se označuje malým písmenem m s indexem - m i. Index je dekadické číslo, které odpovídá n-tici vstupních proměnných. Každou n-tice proměnných můžeme číst jako binární číslo, viz obr Minterm, Sestavení min- termu i. Indexování mintermu Čtveřice, kde proměnné jsou v pořadí a, b, c, a d Pro čtveřici ( ), minterm m 5 je a bc d Pro čtveřici ( ), maxterm M 5 je a + b + c + d Součin je roven 1, když všechny proměnné mají hod- Součet je roven 0, když všechny proměnné mají hod- Obr Minterm a maxterm pro čtveřici vstupních proměnných Maxterm je normální součtový term s n proměnnými. Pro n proměnných existuje 2 n součtových termů. Pro jednu kombinaci vstupních hodnot proměnných je maxterm roven 0. Pro zbývající kombinace pak je roven 1, obr Pro danou kombinaci vstupních proměnných zapíšeme Maxterm tak, že pokud proměnná nabývá hodnoty 1, vypíšeme její negaci a pokud je rovna 0, vypíšeme ji v přímém tvaru, viz obr Maxterm se označuje velkým písmenem M s indexem - M i. Index je dekadické číslo, které odpovídá n-tici vstupních proměnných. Každou n-tice proměnných můžeme číst jako binární číslo, viz obr Maxterm, Sestavení maxtermu M i. Indexování maxtermu Každá logická funkce může být rozložena jako součet nebo součin nejjednodušších funkcí f i, kde každá tato funkce definuje výstup pro jeden řádek pravdivostní tabulky. Součet nejjednodušších funkcí f i, je uveden na obr Při vyjádření funkce f jak v obrázku, tak i ve vzorcích (0304) a (0305) byl použit axiom A5D a teorém T1. a b f a b f 0 a b f 1 a b f 2 a b f = Obr Součet - rozklad funkce f = f 0 + f 1 + f 2 + f 3 (0304) f = f 1 + f 2 (0305) VŠB-TU Ostrava 24

31 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO U logického součinu, pouze jedna kombinace vstupů má hodnotu 1 a zbývající kombinace mají hodnotu 0. Proto nejjednodušší funkce f 1 a f 2 mohou být vyjádřeny pomocí mintermů. Minterm pro funkci f 1 je a b a minterm pro funkci f 2 je ab. Po dosazení mintermů do vzorce (0305), získáme nový, viz vztah (0306), který definuje funkci EXCLUSIVE-OR. f(a,b) = a b + ab (0306) Obdobně i u součinu nejjednodušších funkcí f i, je uplatněn axiom A5 a teorém T1D, pak na obr je uveden rozklad těchto funkcí v součinu. Odpovídající vzorce jsou pak vyjádřeny vztahy (0307) a (0.308). Funkce exclusive-or Kanonická disjunktivní normální forma a b f a b f 0 a b f 1 a b f 2 a b f = * * * Obr Součin - rozklad funkce f = f 0 * f 1 * f 2 * f 3 (0307) f = f 0 * f 3 (0308) U logického součtu má hodnotu 0 pouze jedna kombinace vstupů a zbývající kombinace mají hodnotu 1. Proto nejjednodušší funkce f 0 a f 3 mohou být vyjádřeny pomocí maxtermů. Maxterm pro funkci f 0 je a + b a Maxterm pro funkci f 2 je a + b. Po dosazení Maxtermů do vzorce (0308), získáme nový vztah, (0309), f(a, b) = (a + b) (a + b ) (0309) Kanonická normální forma Vztahu (0306) se říká Kanonická disjunktivní normální forma (KDNF), nebo součet součinů. To znamená, že každý součin obsahuje všechny proměnné a odpovídá jednomu řádku pravdivostní tabulky. Obdobně vztahu (0309) se říká Kanonická konjunktivní normální forma (KKNF), nebo součin součtů. To znamená, že každý součet obsahuje všechny proměnné a odpovídá jednomu řádku pravdivostní tabulky, [wiki_0303]. Obecný zápis kanonických normálních forem je dán vztahem (0310) pro součet součinů a vztahem (0311) pro součin součtů. Kde f(x n 1 x 1, x 0 ) = m i (0310) f(x n 1 x 1, x 0 ) = M i (0311) f(x n-1, x 1, x 0) je Booleovská funkce v definovaném pořadí vstupních proměnných. m i jsou mintermy. M i jsou Maxtermy. V praxi se používají mintermy a Maxtermy kanonické formy pro definování booleovských funkcí. Zápis musí brát v úvahu ale i neúplné booleovské funkce s neurčitou hodnotou X. Níže uvedené zápisy (0310) a (0311), mají dvě části. První část popisuje hodnotu 1 nebo 0 a druhá VŠB-TU Ostrava 25

32 3. Booleova algebra popisuje hodnotu X. Vztah (0310) se používá pro zápis pomocí mintermů a vztah (0311) pro zápis pomocí Maxtermů. Kde f(x n 1 x 1, x 0 ) = m(i, j, ) + d(k, l, ) (0310) f(x n 1 x 1, x 0 ) = M(o, p, ) D(r, s, ) (0311) f(x n-1 x 1, x 0) je booleovská funkce s definovaným pořadím proměnných. m(i, j, ) je seznam indexů odpovídajících mintermům. d(k, l, ) je seznam indexů odpovídajících mintermům s neurčitou hodnotou x. M(o, p, ) je seznam indexů odpovídajících Maxtermům. D(r, s, ) je seznam indexů odpovídajících Maxtermům s neurčitou hodnotou x. Na obr je uveden příklad definice neúplné booleovské funkce vyjádřené pomocí mintermů a Maxtermů v pravdivostní tabulce. Tuto funkci je možné vyjádřit i pomocí vztahů, viz (0312) a (0313). Z uvedeného je zřejmé, že neurčitá hodnota X je ve vztahu (0312) brána s hodnotou 1 a ve druhém vztahu (0313) s hodnotou 0. Po tomto nahrazení hodnot můžeme říci, že neúplná booleovská funkce je definována nejednoznačně. f(a, b, c) = m(1, 2, 5) + d(3, 6) (0312) f(a, b, c) = M(0, 4, 7) D(3, 6) (0313) Index a b c f Minterm Maxterm M 0 = a + b + c m 1 = a b c m 2 = a b c X d 3 = a b c D 3 = a + b + c M 4 = a + b + c m 5 = a b c X d 6 = a b c D 6 = a + b + c M 7 = a + b + c Obr Neúplná booleovská funkce vyjádřená pomocí mintermů a Maxtermů V literatuře se kromě výše uvedeného označení můžeme setkat i s označením D pro disjunktivní formu booleovské funkce a písmenem K pro konjunktivní formu. Příklad pro úplnou Booleovskou funkci: F 1(x, y, z) = D(1, 3, 4, 6) nebo F 2(x, y, z) = K(0, 5, 6, 7). Vyjádření neúplné booleovské funkce je pak: F 3(x, y, z) = K (1, 4, 6, (3, 7)). V závorce jsou uvedeny indexy vstupních n-tic proměnných. Symbol D (disjunkce) značí soupis indexů, kde booleovská funkce F 1 nabývá hodnotu 1. Symbol K (konjunkce) značí soupis indexů, kde booleovská funkce F 2 nabývá hodnotu 0. Pro neúplnou booleovskou funkci je zápis F 3, kde indexy ve vnitřní závorce značí neurčitou hodnotu X. VŠB-TU Ostrava 26

33 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Příklady k řešení Příklad 1: Sestavte pravdivostní tabulku pro výstupní booleovskou funkci F = A '+ B. Řešení: Nejdříve pro dvě vstupní proměnné A, B vypíšeme v pravdivostní tabulce všechny možné kombinace. V dalším sloupci určíme A a poté provedeme logický součet uvedený v zadání. Výsledek: A B A F=A +B Příklad 2: Sestavte pravdivostní tabulku pro výstupní booleovskou funkci F = ab' + a'c Výsledek: a b c a b ab' a'c F = ab' + a'c Příklad 3: Jsou dány výstupní funkce v kanonickém součtu F 1(A,B,C) = Σm i (1, 2, 3, 5); F 2 (A,B,C) = Σm i (0, 4, 6, 7). Napište k těmto funkcím odpovídající tvar výstupní funkce v kanonickém součinu. Výsledek: F 1(A,B,C) = ΠM i (0,4, 6, 7); F 2 (A,B,C) = ΠM i (1, 2, 3, 5); Jsou dány výstupní funkce v kanonickém součinu F 1(A,B,C) = ΠM i (0, 4, 6, 7); F 2 (A,B,C) = ΠM i (1, 2, 3, 5). Napište k těmto funkcím odpovídající tvar výstupní funkce v kanonickém součtu. Výsledek: F 1(A,B,C) = Σm i (1, 2, 3, 5); F 2 (A,B,C) = Σm i (0, 4, 6, 7); Příklad 4: Najděte algebraický součet všech mintermů ve výstupní funkci f(a,b,c) = a b+ac +b c a poté určete i kanonický součin. Řešení: f= a b+ac +b c= a b (c+c ) + ac (b+b ) + b c(a+a ) = a bc+a bc + abc +ab c +ab c+a b c = a b c + a bc + a bc+ ab c +ab c+ abc Pak kanonický součet výstupní funkce je ve tvaru f(a,b,c) = Σm i (1, 2, 3, 4, 5, 6) Kanonický součin k výše uvedené funkci pak je f(a,b,c) = ΠM i (0, 7, 8, 9, 10, 11, 12, 13, 14, 15) VŠB-TU Ostrava 27

34 3. Booleova algebra 3.5 Reference [Roth_2004] [wiki_0301] [wiki_0302] [wiki_0303] Charles H. Roth, Jr.: Fundamentals of Logic Design; Thomson, Brooks/Cole 2004; ISBN Boolean algebra; on line Boolean function; on line Canonical normal form; on line [wiki_0304] Truth table; on line VŠB-TU Ostrava 28

35 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO 4. Návrh Booleovské funkce Základními kroky pro návrh číslicového systému jsou syntéza a následné realizace. Syntéza je proces, který transformuje popis digitálního systému do vhodné formy pro realizaci. Touto vhodnou formou může být například schéma zapojení, které představuje propojení hradel, klopných obvodů, multiplexerů, atd. Tato kapitola je věnována syntéze jednoduché booleovské funkce a výsledkem je kombinační logika, [wiki_0403]. V našem případě, kombinační logika představuje soubor navzájem propojených logických hradel. Chování kombinační logiky a booleovské funkce je stejné, v obou případech výstup závisí pouze na aktuálním vstupu. Jedním z výsledků syntézy je schéma zapojení kombinačního obvodu. Schéma je grafické znázornění logického výrazu, [wiki_0402]. Schéma zapojení kombinační logiky se skládá z logických hradel a spojnic, obr Spojení logických hradel pak představuje vyjádření logické funkce nebo operace. Seřazení hradel je dáno pořadím proměnných ve výrazu. Násobení "má vyšší prioritu než non-ekvivalence. Na obr vidíme kombinační logiku 3 úrovně. Syntéza Kombinační logika Schéma zapojení c c b b a y y = a((b c)cb ) Obr Schéma zapojení a odpovídající rovnice V praxi je však s výhodou využívána dvou-úrovňová logika. Výhody spočívají v tom že: Dvou-úrovňová logika odpovídá kanonické formě booleovského vyjádření. Realizace dvouúrovňové logiky má minimální propagační zpoždění. Realizace pomocí dvou-úrovňové logiky vede k minimálnímu počtu logických hradel. Dvou-úrovňová logika a y b c y = a + b c Obr Schéma zapojení pomocí dvou-úrovňové logiky Kritéria minimalizace VŠB-TU Ostrava 29

36 4. Návrh Booleovské funkce Dále se budeme věnovat především syntéze dvou-úrovňové kombinační logiky, která je znázorněna na obr Tato logika vede k minimálnímu počtu základních logických hradel, mezi která patří například AND, OR, NOT, NAND a NOR. Syntézu víceúrovňové logiky nebo syntézu pomocí speciálních logických hradel jako je XOR, popřípadě syntézu velkých logických funkcí s minimálním zpožděním lze nalézt v literatuře [Ergovac_Lang_2004], [Koren_2008], [Katz_Borriello_2005], [Roth_2004], [Warkley_2006], [Fristacky_1986] a další. Poznámka k zajímavým syntézám Syntéza 64-bitové sčítačky s minimálním zpožděním. Syntéza porovnávacího obvodu pro dvě 128-bitová čísla. Syntéza obvodů, které jsou založeny na lineární algebře, tzn. kódování, šifrování, atd. 4.1 Logická hradla Logická hradla jsou základní prvky kombinační logiky, a tyto hradla jsou popsány principy Booleovy algebry. Každé logické hradlo má odpovídající booleovskou funkci a přiřazený operátor, který se používá v booleovských výrazech. Logické hradlo má také svou schématickou značku, která se používá pro kreslení schématu zapojení. Realizace pomocí logických hradel může být založena na pneumatických, hydraulických, elektrických a jiných principech. Nicméně, nejznámější logická hradla jsou založena na elektronických principech a všechny moderní číslicové systémy jsou realizovány pomocí těchto elektronických logických hradel. Každé logické hradlo lze popsat několika způsoby. Pro jedno hradlo existují i další názvy operací. Základním popisem logického hradla je pravdivostní tabulka a odpovídající Karnaughova mapa. Hradlo může být popsáno větou a popřípadě i pomocí programových příkazů. Některé výrazy jsou odvozeny použitím De Morganových pravidel. Každému hradlu odpovídá grafický symbol, který se používá ve schématu zapojení. Hradlo NOT. Obvyklý název tohoto hradla je invertor, [wiki_0404]. Na výstupu tohoto hradla je opačná hodnota než na vstupu. Alternativními názvy jsou jednotkový doplněk, negace, komplement, atd. Funkci hradla NOT můžeme popsat slovy: Na výstupu hradla NOT je 1, když na jeho vstupu je 0 a opačně. Možnosti vyjádření této funkce a odpovídající příkazy v programovacích jazycích jsou: not a;!a; ~a; a ; ā; a Y =!a; Y=~a; If (a==1) then z=0; else z=1; If (a==0) z=0; else z=1; Hradlo NOT VŠB-TU Ostrava 30

37 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Pravdivostní tabulka a y Karnaughova mapa a 1 0 Obr Hradlo NOT Schématická značka a y Hradlo AND. Hradlo AND odpovídá Booleovské operaci součinu. Alternativní názvy pro toto hradlo jsou konjunkce, operace AND, logické násobení, logický součin [wiki_0405]. Funkci hradla AND můžeme popsat slovy: Na výstupu hradla AND je 1, pouze když na všech jeho vstupech jsou 1. Logický součin je roven 1, když vstupy a a současně i b jsou rovny 1; jinak je výstup roven 0. Logický součin je roven 0, když vstup a nebo b je roven 0; jinak je výstup roven 1. Možná vyjádření této funkce a odpovídající příkazy v programovacích jazycích jsou: a b; ab; a AND b; a b; a & b; a && b y := a && b; y := a & b; y =!(!a!b); y =!(!a!b); If (a==1 & b==1) z=1; else z=0; If (a==0 b==0) z=0; else z=1; Hradlo AND Pravdivostní tabulka a b y Karnaughova mapa Schématická značka a 0 0 a y b b 0 1 Obr Hradlo AND Hradlo OR. Hradlo OR odpovídá Booleovské operaci součtu. Alternativní názvy pro toto hradlo jsou disjunkce, operace OR, logické sčítání, logický součet [wiki_0406]. Funkci hradla OR můžeme popsat slovy: Na výstupu hradla OR je 1, pouze když na jednom nebo více jeho vstupech jsou 1. Logický součet je roven 1, když vstupy a nebo b jsou rovny 1; jinak je výstup roven 0. Logický součet je roven 0, když vstupy a a současně i b jsou rovny 0; jinak je výstup roven 1. Hradlo OR Možná vyjádření této funkce a odpovídající příkazy v programovacích jazycích jsou: a + b; a OR b; a # b; a b; a b; a b z = a b; zz = a b; z =!(!a &&!b); zz =!(!a &&!b); If (a == 1 b == 1) then z = 1; else z = 0; If (a == 0 & b == 0) z = 0; else z = 1; VŠB-TU Ostrava 31

38 Pravdivostní tabulka a b y Karnaughova mapa a 0 1 b 1 1 Obr Hradlo OR 4. Návrh Booleovské funkce Schématická značka a y b Hradlo NAND. Je negací hradla AND, [wiki_0407]. Alternativní názvy pro toto hradlo jsou negace konjunkce, operace NAND, negace AND, negace logického násobení, negovaný logický součin, Shefferova funkce (). Funkci hradla NAND můžeme popsat slovy: Na výstupu hradla NAND je 1, když aspoň na jednom z jeho vstupů je 0. Negovaný logický součin je roven 1, když proměnné na vstupu a nebo b jsou rovny 0; jinak je výstup roven 0. Negovaný logický součin je roven 0, když proměnné a a současně b jsou rovny 1; jinak je výstup roven 1. Hradlo NAND Možná vyjádření této funkce a odpovídající příkazy v programovacích jazycích jsou:!(a. b); (a. b) ; a NAND b; (a b); ~(a & b);!(a && b); z :=!(a && b); zz :=!(a & b); z =!a!b; zz =!a!b; z :=!(a & b & c); If (a == 1 & b == 1) z = 0 else z = 1; If (a == 0 b == 0) z = 1 else z = 0; Hradlo NAND nesplňuje asociativní zákon Pravdivostní tabulka a b y Karnaughova mapa a 1 1 b 1 0 Schématická značka a y b Obr Hradlo NAND Hradlo NOR. Je negací hradla OR, [wiki_0408]. Alternativní názvy pro toto hradlo jsou negace disjunkce, operace NOR, negace OR, negace logického součtu, Peirceova funkce (). Funkci hradla NOR můžeme popsat slovy: Na výstupu hradla je 1, pouze když na všech jeho vstupech jsou 0. Negovaný logický součet je roven 1, když proměnné a a současně b jsou rovny 0; jinak je výstup roven 0. Negovaný logický součet je roven 0, když proměnné a nebo b jsou rovny 0; jinak je výstup roven 1. Hradlo NOR VŠB-TU Ostrava 32

39 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Možná vyjádření této funkce a odpovídající příkazy v programovacích jazycích jsou:!(a + b); (a + b) ; a NOR b; (a b); ~(a b);!(a b); z :=!(a b); zz :=!(a b); z =!a &&!b; zz =!a &!b; If (a == 1 b == 1) z = 0; else z = 1; If (a == 0 & b == 0) z = 1; else z = 0; Hradlo NOR nesplňuje asociativní zákon Pravdivostní tabulka a b y Karnaughova mapa a 1 0 b 0 0 Obr Hradlo NOR Schématická značka a y b Hradlo XOR. Odpovídá matematickému součtu modulo 2. Alternativní názvy pro hradlo XOR je non-equivalence, exclusive OR, [wiki_0409]. Funkci hradla XOR můžeme popsat slovy: Výstup dvouvstupového hradla XOR je roven 1, když vstupy si nejsou rovny. Výstup dvouvstupového hradla XOR je roven 0, když vstupy si jsou rovny. Operace XOR může být vyjádřena jako a XOR b = a b=ab + a b. Hradlo XOR Možná vyjádření této funkce a odpovídající příkazy v programovacích jazycích jsou: a b; a XOR b; a ^ b; z := a ^ b; z = (!a & b) (a &!b); If ((a & b) (!a &!b)) z = 0; else z = 1; If ((a b) & (!a!b)) z = 1; else z = 0; Pravdivostní tabulka a b y Karnaughova mapa Schématická značka a 0 1Z b a y ba+ 1Z 0 Obr Hradlo XOR Poznámka k operaci XOR Operace XOR odpovídá matematickému součtu modulo 2. Například = 1 VŠB-TU Ostrava 33

40 4. Návrh Booleovské funkce Hradlo XNOR. Operace XNOR je negací operace XOR. Alternativní názvy jsou ekvivalence, exclusive NOR, [wiki_0410]. Funkci hradla XNOR můžeme popsat slovy: Výstup dvouvstupového hradla XNOR je roven 1, když vstupy si jsou rovny. Výstup dvouvstupového hradla XNOR je roven 0, když vstupy si nejsou rovny. Operace XNOR může být vyjádřena jako a XNOR b = (a b) =ab+ a b. Možnosti vyjádření této funkce a odpovídající příkazy v programovacích jazycích jsou:!(a b); NOT(a XOR b); ~(a ^ b); a b; a b z :=!(a ^ b); z = (!a &!b) (a & b); If ((a & b) (!a &!b)) z = 1 else z = 0; If ((a b) & (!a!b)) z = 0 else z = 1; Hradlo XNOR Pravdivostní tabulka a b y Syntéza Karnaughova mapa a 1 0 b 0 1 Obr Hradlo XNOR Schématická značka a y b Tato podkapitola je věnována hledání minimálního tvaru booleovské funkce s využitím dvouúrovňové logiky. Cílem je najít kanonickou formu logického výrazu s minimálním počtem proměnných. Proměnné mohou být v přímém nebo negovaném tvaru, například proměnná a nebo a. Tedy výsledkem syntézy bude buď minimální součet součinů (minimální disjunktivní forma) nebo minimální součin součtů (minimální konjunktivní forma). Poznámka k pravdivostní tabulce Booleovské funkce Vyjádření Booleovské funkce nemůže pracovat s hodnotou X (nemůže se objevit ve výstupní rovnici). A to je důvod, proč pravdivostní tabulka definuje Booleovskou funkci jednoznačně. Nejjednodušší způsob jak provést tuto minimalizaci je buď pomocí Booleovy algebry nebo Karnaughovy mapy. Příklady minimalizace s použitím booleovských axiomů a teorémů je uvedeno na obr Tento princip je vhodný pouze pro úplné booleovské funkce. Neúplná Booleovská funkce obsahuje hodnoty 0, 1 a X. V minimalizaci pomocí booleovských zákonů je nutno předem definovat hodnotu X buď jako logickou 1 nebo 0. Předem rozhodnout o vhodné hodnotě je prakticky nemožné. Proto aplikace booleovských zákonů je vhodné pouze aplikovat na úplnou Booleovskou funkci. Pro minimalizaci neúplné Booleovské funkce je vhodná grafická metoda Karnaughovy mapy. VŠB-TU Ostrava 34

41 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO y = cba M(0, 4, 6) = M 0 + M 4 + M 6 y = (c + b + a) (c + b + a) (c + b + a) = T8DT2D = (c.c + b + a) (c + a + b.b ) y = (b + a) (c + a) Teorémy T4D a T1 Obr Minimalizace pomocí teorémů Booleovy algebry Další metodou minimalizace je Karnaughova mapa. Jde o grafický způsob zjednodušení a minimalizace booleovské funkce, který je dále použit pro následnou realizaci. Tato metoda je vhodná pro 1 až 4 proměnné (odborníci používají Karnaughovy mapy i pro 5 nebo 6 proměnných). Pokud je ve výrazu více jak 5 proměnných s výhodou se využívá k minimalizaci počítačových algoritmů. Karnaughova mapa je uspořádána skupina buněk. Počty buněk je dán mocninou 2 n, kde n je počet booleovských proměnných. Karnaughovy mapy pro 1, 2, 3 a 4 proměnné jsou zobrazené na obr Více informací o Karnaughových mapách naleznete v literatuře [wiki_0413], [Fristacky_1986], [Warkley_2006], [Roth_2004] a [Katz_ Borriello_2005]. Karnaughova mapa Počet buněk je dán mocninou 2 1 proměnná 2 proměnné 3 proměnné 4 proměnné a a a b a b b 2 3 c d c Obr Karnaughovy mapy pro 1, 2, 3 a 4 proměnné Maurice Karnaugh (narozen 1924) je americký fyzik známý pro svou Karnaughovu mapu používanou v Booleově algebře. Narodil se v New Yorku City, vystudoval matematiku a fyziku v City College of New York a pokračoval dále na Yale univerzitě. Dlouho pracoval v Bellově laboratoři, krátce u AT&T a pak u IBM v Gaithersburgu. V roce 1976 byl zvolen v IEEE Feloow a byl také významnou osobností na Polytechnické univerzitě v New Yorku. Je autorem řady prací The Map Method for Synthesis of Combinational Logic Circuits, Trans. AIEE. pt I, 72(9): , November 1953; Generalized quicksearch for expert systems, in Proc. Artificial Intelligence for Applications, pp VŠB-TU Ostrava 35

42 4. Návrh Booleovské funkce Poznámka ke značení Karnaughových map a b a b Každá buňka má svůj minterm a maxterm d c Proměnná a má hodnotu 1 Proměnná a má hodnotu 0 d c Proměnná d má hodnotu 1 Proměnná d má hodnotu 0 Sloupce a řádky jsou označeny příslušnou proměnnou. Buňky se vztahují k řádku či sloupci a proměnná pod čarou v daných buňkách má hodnotu 1 a mimo čáru mají buňky hodnotu 0. Na tomto základě je možné odvodit minterm a Maxterm pro každou buňku. Z tohoto důvodu, minterm nebo Maxterm může být vyjádřen jako index a potom každá buňka má svůj index (zelená barva). Minterm pro buňku s indexem 13, binárně 1101, je dcb a. Maxterm pro buňku s indexem 3, binárně 0011, je d + c + b + a. Pravdivostní tabulka obsahuje řádky a každý řádek odpovídá jinému mintermu nebo Maxtermu. Stejně je tomu i Karnaughovy mapy. Z tohoto důvodu, je možné převést pravdivostní tabulku do Karnaughovy mapy viz obr Každý minterm nebo Maxterm má svůj index, který je stejný jak v pravdivostní tabulce tak i v Karnaughově mapě a v definici booleovské funkce, vztahy (0401) a (0402). Kde f(x n 1 x 1, x 0 ) = m(i, j, ) + d(k, l, ) (0401) f(x n 1 x 1, x 0 ) = M(o, p, ) D(r, s, ) (0402) f(x n-1 x 1, x 0) je Booleovská funkce s definovaným pořadím proměnných. m(i, j, ) je seznam indexů, které odpovídají mintermům. d(k, l, ) je seznam indexů, které odpovídají mintermům s neurčitou hodnotou X. M(o, p, ) je seznam indexů, které odpovídají Maxtermům. D(r, s, ) je seznam indexů, které odpovídají Maxtermům s neurčitou hodnotou X. f(c, b, a) = m(2, 4, 6) + d(1, 3) f(c, b, a) = M(0, 5, 7) + D(1, 3) Index c b a f X X c a Obr Zápis z booleovské funkce do Karnaughovy mapy b X 1 X VŠB-TU Ostrava 36

43 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Uspořádání buněk v Karnaughově mapě zajišťuje, že sousední buňky se liší pouze v hodnotě jedné proměnné. Sousední buňky jsou uspořádány vodorovně nebo svisle (ne diagonálně). Tato podmínka je splněna i pro buňky vnějších řádků a sloupců. [Katz_Borriello_2005]. Na sousední buňky je možné aplikovat teorémy T10 nebo T10D. Počet sousedních buněk, je dán mocninou 2. Buňka s indexem 2 má minterm d c ba a buňka s indexem 3 má minterm d'c'ba, obr Pokud je vytvořen součtový tvar funkce, pak odpovídající Booleovský výraz je d'c'ba ' + d'c'ba. Aplikací teorému T10, bude výraz zjednodušen na d'c'b, což odpovídá modré smyčce v Karnaughově mapě na obr Sousední buňky Součtový tvar d'c'ba ' + d'c'ba = d'c'b Obdobným způsobem je možné stanovit výraz booleovské funkce pro buňky 6 a 7. Tyto dvě smyčky jsou sousední, liší se v jedné proměnné a je možné aplikovat teorém T10. Výsledkem je součtový tvar d'b, což odpovídá červené smyčce v Karnaughově mapě na obr d'c'b + d'c b = d' b Stejně tak je možné použít výše uvedené kroky i pro Maxtermy, obr Buňky s indexy 4 a 6 jsou sousední a můžeme použít teorém T10D. Součinový tvar (d + c + b + a) (d + c + b + a) = (d + c + a) Výsledkem je součtový term. Buňky s indexy 12 a 14 jsou sousední k buňkám 4 a 6 a lze tedy aplikovat teorém T10D, tak získáme součinový tvar funkce, (d + c + a) (d + c + a) = (c + a) d c a b X d c b d cb d b d c a b X d + c + a c + a d + c + a Obr Sousední buňky Pro přehlednost se sousední buňky v Karnaughově mapě spojují do smyček. Počet buněk ve smyčce je dán mocninou 2 (1, 2, 4, 8...). V případě, že smyčka je znázorněna na Karnaughově mapě, pak je možné odvodit odpovídající součinový nebo součtový term přímo z Karnaughovy mapy. Poznámka k sousedním buňkám na vnějších okrajích Karnaughovy mapy Buňky na levém/pravém okraji nebo horním/dolním okraji mapy jsou sousední. V důsledku toho, buňky v rozích jsou také sousední. VŠB-TU Ostrava 37

44 4. Návrh Booleovské funkce Pro součinový term platí: Smyčka musí pokrývat všechny buňky s hodnotou 1, v případě potřeby je možné použít do smyčky i buňky s hodnotou X. V případě, že smyčka se vztahuje pouze na oblasti v mapě, kde je proměnná 0, pak je proměnná v součinovém termu negovaná. V případě, že smyčka se vztahuje pouze na oblasti v mapě, kde je proměnná 1, pak je proměnná v součinovém termu v přímém tvaru. Pokud smyčka pokrývá oblasti mapy, kde je proměnná 0, stejně jako oblasti, kde je 1, potom se proměnná ve výsledku nezobrazí. Pravidla pro sestavení součinového termu Pro součtový term platí: Smyčka musí pokrývat všechny buňky s hodnotou 0 a v případě potřeby je možné použít do smyčky i buňky s hodnotou X. V případě, že smyčka se vztahuje pouze na oblasti v mapě, kde je proměnná 0, pak je proměnná v součtovém termu v přímém tvaru. V případě, že smyčka se vztahuje pouze na oblasti v mapě, kde je proměnná 1, pak je proměnná v součtovém termu negovaná. Pravidla pro sestavení součtového termu Poznámka k počtu proměnných v součtovém nebo součinovém termu Je-li Karnaughova mapa pro n-proměnných a smyčka obsahuje 2 i buněk, pak každý term obsahuje n - i + 1 proměnných. Například Karnaughova mapa pro 4 proměnné. Když smyčka obsahuje 1 buňku, pak term má 4 proměnné. Když smyčka obsahuje 2 buňky, pak term má 3 proměnné. Když smyčka obsahuje 4 buňky, pak term má 2 proměnné. atd. 4.3 Minimalizace pomocí Karnaughovy mapy Výsledkem zjednodušení a minimalizace z Karnaughovy mapy je výraz v podobě součtového nebo součinového tvaru. Tyto tvary jsou vhodné pro realizaci kombinační dvou-úrovňové logiky. Součtový tvar je odvozen podle následujícího algoritmu: Vytvořte všechny maximální smyčky, které pokrývají všechny buňky s hodnotou 1, popř. X pokud se hodí. Možný počet buněk ve smyčce je 1, 2, 4, 8, což jsou mocniny 2. Počet smyček musí být minimální, ale všechny buňky s hodnotou 1 musí být pokryty. Smyčky musí mít minimální počet proměnných. Vyjádřete součinové termy zbývajících smyček. Vytvořte součtový tvar. f(d, c, b, a) = m(2, 3, 6, 10) + d(1, 7, 9, 11, 14) (0403) Minimalizace pro součtovou formu VŠB-TU Ostrava 38

45 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Všechny praktické minimalizace budou provedeny i pro neúplnou booleovskou funkci, která je podle vtahu (0403). Minimalizace pro součtový tvar je znázorněna na obr a vede k 4 možným výsledkům. Všechny výsledky jsou si rovnocenné a odpovídají neúplné booleovské funkci. Nicméně, odpovídají 4 různým kompletním logickým funkcím. Výsledné funkce jsou: Funkce f1 obsahuje žluté a zelené součinové termy a minimální součtový tvar je dán vztahem (0404). Funkce f2 obsahuje žluté a modré součinové termy a minimální součtový tvar je dán vztahem (0405). Funkce f3 obsahuje žluté a červené součinové termy a minimální součtový tvar je dán vztahem (0406). Funkce f4 obsahuje červené a zelené součinové termy a minimální součtový tvar je dán vztahem (0407). f1 = a b + bd (0404) f2 = a b + ac (0405) f3 = a b + bc (0406) f4 = bd + bc (0407) f(d, c, b, a) = m(2, 3, 6, 10) + d(1, 7, 9, 11, 14) d c a b X X X X X 1 Minimalizace má 4 možnosti c d a b 0 X X X 0 X X 1 c d c d c d a b 0 X X X 0 X X 1 a b 0 X X X 0 X X 1 a b 0 X X X 0 X X 1 Součinové termy a b bd ac bc Minimalizace pro součtovou formu. Obr Minimalizace pro součtovou formu d b a b f1 f1 = a b + bd Kombinační obvod AND-OR Obr Schéma dvou-úrovňového kombinačního obvodu AND-OR VŠB-TU Ostrava 39

46 4. Návrh Booleovské funkce Jedno možné zapojení logického obvodu pro danou booleovskou funkci je na obr Pro realizaci jsou vybrána logická hradla AND a OR. Aplikace těchto logických hradel vede ke kombinační dvou-úrovňové logice. Tato realizace je také nazývána AND-OR. Tento název je vytvořen pořadím logických hradel ve schématu. Obvod AND-OR vychází ze součtového tvaru. Další možností je vytvořit minimální součinový tvar. Tento tvar je odvozen podle následujícího algoritmu: Vytvořte všechny maximální smyčky, které pokrývají všechny buňky s hodnotou 0 popř. X pokud se to hodí. Možný počet buněk ve smyčce je 1, 2, 4, 8, což jsou mocniny 2. Počet smyček musí být minimální a všechny buňky s hodnotou 0 musí být pokryty. Smyčky musí mít minimální počet proměnných. Vyjádřete součinové termy zbývajících smyček. Minimalizace pro součinovou formu Vytvořte součinový tvar. f(d, c, b, a) = m(2, 3, 6, 10) + d(1, 7, 9, 11, 14) a b Součtové termy d c b a X X X X X 1 d Minimalizace má 3 možnosti a b d c c 0 X X X 0 X X 1 a b 0 X X X 0 X X 1 b a + c c + d d c 0 X X X 0 X X 1 a + d Obr Minimalizace pro součinovou formu Minimalizace pro součinový tvar je představen na obr a vede k 3 možným výsledkům. Funkce je stejná jako v předchozím příkladu, vztah (0403). Všechny výsledky jsou rovnocenné a odpovídají neúplné booleovské funkci. Nicméně, odpovídají 3 různým kompletním logickým funkcím. Výsledné funkce jsou: Funkce f5 obsahuje žluté a zelené součtové termy a minimální součinový tvar je dán vztahem (0408). Funkce f6 obsahuje žluté a červené součtové termy a minimální součinový tvar je dán vztahem (0409). Funkce f7 obsahuje žluté a modré součtové termy a minimální součinový tvar je dán vztahem (0410). VŠB-TU Ostrava 40

47 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO f5 = b (a + c) (0408) f6 = b (c + d ) (0409) f7 = b (a + d ) (0410) Jedním z možných logických obvodů kombinační logiky pro danou Booleovskou funkci je na obr Pro realizaci jsou vybrána logická hradla OR a AND. Schéma zapojení kombinační obvodu pro danou booleovskou funkci je na obr Aplikace těchto logických hradel vede ke kombinační dvou-úrovňové logice. Tato realizace je také nazývána OR-AND. Název je vytvořen pořadím logických hradel ve schématu. Obvod OR-AND vychází ze součinového tvaru. d c b f6 f6 = b (c + d ) Kombinační obvod AND-OR Obr Schéma kombinačního obvodu OR-AND o dvou úrovních Pokud je minimalizována úplná booleovská funkce, pak je možné získat i více minimálních výrazů jak v součtovém tak i v součinovém tvaru. Pak všechny výrazy jsou platné a odpovídají úplné booleovské funkci. Příklady k řešení Příklad 1: Pomocí Booleovy algebry určete minimální součtový tvar v následujících booleovských funkcí: 1. F 1(c, b, a) = m i(0,2,5,7) Výsledek: F 1 = a c + ca 2. F 2(c, b, a) = m i(0,2,7) + d i(3,6) Výsledek: F 2 = a c + b 3. F 3(c, b, a) = Π M i (1,3,5,7) Výsledek: F 3 = c 4. F 3(c, b, a) = Π M i (0,1,7) Π D i (4,5) Výsledek: F 4 = b(c + a ) Příklad 2: Pomocí Booleovy algebry určete minimální součinový tvar v následujících booleovských funkcí: 1. F 1(c, b, a) = m i(0,2,5,7) Výsledek: F 1 = a c + ca 2. F 2(c, b, a) = m i(1,3,6,7) + d i(2,5) Výsledek: F 2 = a+b 3. F 3(c, b, a) = Π M i (1,3,5,7) Výsledek: F 3 = c 4. F 3(c, b, a) = Π M i (0,6) Π D i (4,7) Výsledek: F 4 = c b+b a Příklad 3: Pomocí Karnaughovy mapy určete minimální součtový i součinový tvar v následujících booleovských funkcí: 1. F 1(c, b, a) = m i(0,2,3,4) Výsledek: F 1 = c b+b a ; F 1 = (c +b )(b+a ); 2. F 2(c, b, a) = m i(1,2,5) + d i(3) Výsledek: F 2 = c b+b a; F 2 =(c +b )(b+a); 3. F 3(c, b, a) = Π M i (4,5,7) Výsledek: F 3 = c +ba ; F 3 = (c +b)(c +a ); 4. F 4(c, b, a) = Π M i (0,4) Π D i (2,5) Výsledek: F 4 = b+a; F 4 =(b+a); VŠB-TU Ostrava 41

48 4. Návrh Booleovské funkce 5. F 5(d,c, b, a) = m i(3,5,11,12,13) + d i(2,4,7,10,15) Výsledek: F 5 = ab + b c; F 5 =(b+c)(b +a); 6. F 6(d,c, b, a) = Π M i (0,4,5,10,11,12) + Π D i (2,3,7) Výsledek: F 6 = bc + ac d + b c d +acd; F 6 =(b +c)(a+c+d)(b+c +d)(a+b+c ); 7. F 7(d,c, b, a) = m i(0,2,3,4,6,7,8,10,11,12,14,15) Výsledek: F 7 = a +b; F 7 = (a +b); 8. F 8(d,c, b, a) = Π M i (0,1,2,3,10,11,15) Výsledek: F 8 = cd +ac +b d; F 8 = (b +c)(c+d)(a +b +d ); 9. F 9(d,c, b, a) = m i(1,5,9,13) + d i(3,8,15) Výsledek: F 9 = a+b ; F 9 =(a+b ); 10. F 10(d,c, b, a) = Π M i (2,3,6,7,8,12) + Π D i (1,5,10,14) Výsledek: F 10 = ad+b d ; F 10 =(b +d)(a+d ); 11. F 11(d,c, b, a) = Π M i (2,5,6,9,10,14) + Π D i (8,12) Výsledek: F 11 = a b +ab+ac d +acd; F 11 =(a+b )(b+c+d )(a +b+c +d); 4.4 Realizace pomocí hradel NAND a NOR V předchozí podkapitole, jsou logické funkce realizovány pomocí hradel AND a OR, akorát negace vstupních proměnných nebyla řešena pomocí hradla NOT. Sada logických hradel AND, OR a NOT je kompletní sada a všechny logické funkce mohou být pomocí ní realizovány. Další kompletní sada je soubor hradel NAND nebo NOR. To znamená, že všechny Booleovské funkce mohou být realizovány pouze pomocí logických členů NAND nebo pouze pomocí hradel NOR. Úprava Booleovských výrazů může vést k realizaci víceúrovňového kombinačního obvodu. Pokud se očekává dvou-úrovňový kombinační obvod, potom jsou vhodné nebo nevhodné vstupní výrazy. K úpravě se používá De Morganových pravidel. Dvou-úrovňový kombinační obvod NAND je odvozen ze součtového tvaru a použitím teorému T5 a De Morganových pravidel. Pro funkci f1, která dána formuli (0404) je potom možno psát: f1 = a b + bd = a b + bd = (a b ). (bd ) Výsledkem je vztah, který obsahuje pouze NAND operace. Schéma zapojení kombinačního obvodu realizovaného pouze hradly NAND je na obr (ab). (bd) 1 st NAND 2 nd NAND 3 rd NAND b d a b f1 = a b + b d f1 Kombinační obvod NAND - NAND Obr Kombinační obvod NAND - NAND VŠB-TU Ostrava 42

49 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Obdobně se dá odvodit i dvou-úrovňový kombinační obvod NOR, který je však odvozen se součinového tvaru booleovské funkce a použitím teorému T5 a De Morganových pravidel. Pro funkci f6, která dána formuli (0409) je potom možno psát: f6 = b (c + d ) = b (c + d ) = b + (c + d ) Výsledkem je výraz, který obsahuje pouze operace NOR. Schéma zapojení kombinačního obvodu realizovaného pouze hradly NOR je na obr b (c + d) 1 st NOR d 2 nd NOR b c 2 1 Obr Kombinační obvod - NOR - NOR f6 f6 = b (c + d ) Kombinační obvod NOR - NOR 4.5 Algoritmy minimalizace Pro aplikaci algoritmů minimalizace pomocí programů je vhodný zápis booleovské funkce pomocí HDL (Hardware Description Languages). Na obr je uveden příklad zápisu neúplné booleovské funkce pomocí architektury ve VHDL programovacím jazyce. Zápis odpovídá neúplné booleovské funkci, která je dána formuli (0403). architecture Data_Flow of Incomplete_Boolean_function is begin f <= 0 when d= 0 and c= 0 and b= 0 and a= 0 else -- index 0 1 when d= 0 and c= 0 and b= 1 and a= 0 else -- index 2 1 when d= 0 and c= 0 and b= 1 and a= 1 else -- index 3 0 when d= 0 and c= 1 and b= 0 and a= 0 else -- index 4 0 when d= 0 and c= 1 and b= 0 and a= 1 else -- index 5 1 when d= 0 and c= 1 and b= 1 and a= 0 else -- index 6 0 when d= 1 and c= 0 and b= 0 and a= 0 else -- index 8 1 when d= 1 and c= 0 and b= 1 and a= 0 else -- index 10 0 when d= 1 and c= 1 and b= 0 and a= 0 else -- index 12 0 when d= 1 and c= 1 and b= 0 and a= 1 else -- index 13 0 when d= 1 and c= 1 and b= 1 and a= 0 else -- index 14 X when others; -- remaining indexes end architecture Data_Flow; Obr VHDL zápis neúplné Booleovské funkce Pro minimalizaci booleovské funkce pomocí algoritmů jsou známy dva algoritmy - Quine- McCluskey algoritmus a algoritmus Espresso. Tyto algoritmy jsou aplikovány ve vývojových prostředích pro návrh číslicových systémů. Vstupem do těchto algoritmů je pravdivostní tabulka, která je ale popsána pomocí jazyka HDL. VŠB-TU Ostrava 43

50 4. Návrh Booleovské funkce Algoritmus Quine-Mc Cluskey, byl vyvinut v polovině 1950 a najde minimální tvar jakékoliv logického výrazu. Jde o systematický postup pro vyhledání všech základních implikantů a poté výběru sady tzv. nevyhnutelných implikantů. Jde o tabulkovou metodu, kterou lze lehce převést do příkazů programovacího jazyka. Více informací je v literatuře [Warkley_2006], [Katz_Borriello_2005], [Roth_2004], [wiki_0411] and [Fristacky_1986]. Algoritmus Espresso je program minimalizace Booleovské funkce, který vede k dvouúrovňové realizaci, byl vyvinutý na University of California v Berkeley, a dnes je součástí mnoha podprogramů jako nástroj určený k minimalizaci. Podrobné vysvětlení fungování espressa je nad rámec těchto skript, základní myšlenky však není těžké pochopit, [Katz_Borriello_2005] and [wiki_0412]. 4.6 Reference [Ergovac_Lang_2004] Milos D. Ercegovac, Tomas Lang: Digital Arithmetic; Morgan Kaufmann Publishers, 2004, ISBN [Fristacky_1986] Frištacký N., Kolesár M., Kolenička J., Hlavatý J.: Logické systémy; Alfa a SNTL 1986 [Katz_Borriello_2005] Randy H. Katz, Gaetano Borriello: Contemporary Logic Design, Second Edition; Prentice Hall 2005, ISBN [Koren_2008] Israel Koren: Computer Arithmetic Algorithms; A. K. Peters 2008; ISBN [Roth_2004] Charles H. Roth, Jr.: Fundamentals of Logic Design; Thomson 2004, ISBN [Warkley_2006] Jon F. Warkley: Digital Design, Principles and Practices, Fourth Edition; Prentice Hall 2006, ISBN [wiki_xx01] Logic synthesis; on line [wiki_0402] Circuit diagram; on line Algoritmus Quine-Mc Clusky Algoritmus Espresso [wiki_0403] [wiki_0404] Combinational logic; on line Inverter (logic gate); on line [wiki_0405] AND gate; on line [wiki_0406] OR gate; on line [wiki_0407] NAND gate; on line VŠB-TU Ostrava 44

51 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO [wiki_0408] NOR gate; on line [wiki_0409] XOR gate; on line [wiki_0410] XNOR gate; on line [wiki_0411] [wiki_0412] Quine McCluskey algorithm; on line Espresso heuristic logic minimizer; on line [wiki_0413] Karnaugh map; on line VŠB-TU Ostrava 45

52 5. Reálná čísla 5. Reálná čísla Každý z nás používá čísla, a tato kapitola se zabývá jejich rozdělením do skupin a možností, jejich zastoupení v digitálním světě. V matematice je reálné číslo libovolné číslo, které se na reálné číselné ose nachází od mínus nekonečna do plus nekonečna [wiki_0501]. Pro označení množiny reálných čísel se používá symbol R nebo R. Množina reálných čísel je rozdělena do dvou skupin a to na racionální a iracionálních čísla. Racionální číslo je libovolné číslo, které může být vyjádřeno jako podíl nebo zlomek p/q dvou celých čísel se jmenovatelem q, který není roven nule, [wiki_0502]. Celá čísla jsou pak součástí racionálních čísel, kdy jmenovatel je roven jedné, například 5/1 se rovná 5. Také čísla 25/100, b101/2 3 jsou racionální čísla, která zapisujeme jako 0.25, b V tomto případě, je počet číslic konečný. Naopak, číslo 1/3 patří do druhé skupiny racionálních čísel, kde zlomek je jediným přesným označením čísla. Všimněte si, že zápis pomocí desetinné čárky není přesný, (např ). Množina racionálních čísel je označena tučně Q nebo Q. Iracionální čísla pak jsou zbývající čísla a jsou opakem racionálních čísel, [wiki_0503]. Např. číslo rovnající se druhé odmocnině dvou ( 2) nelze přesně vyjádřit pomocí desetinného čísla s konečným počtem číslic. Dalším příkladem může být číslo π nebo e - Euler hodnota. V praxi používáme pouze jejich přibližné hodnoty 3,14 nebo 2,71. R, reálná čísla jsou např.: +1; -1; +1.41; ; Q, racionální čísla jsou např.: +1; -1/1; 0.25; 2/3; Iracionální čísla jsou např.: 2; π=3.14 ; e=2.71..; Celá čísla jsou součástí racionálních čísel, která mohou být vyjádřena pomocí zlomku se jmenovatelem rovným 1, [wiki_0504]. To znamená, že celé číslo nepoužívá desetinnou část čísla nebo desetinnou čárku. Celá čísla jsou v rozmezí od mínus nekonečna do plus nekonečna. Množina celých čísel je označována tučným symbolem Z nebo Z. Množinu celých čísel je možné rozdělit na podmnožiny dvěma způsoby [wiki_0504], [wiki_0505] a [wiki_0506]. První způsob představuje rozdělení přirozených čísel na tyto podmnožiny {+1, +2, +3 }, nula {0} a opak první podmnožiny {-1, -2, -3 }. Druhý způsob představuje následující podmnožiny přirozených čísel {0, 1, 2, 3 + } a podmnožinu negativních nenulových čísel {-1, -2, -3 }. Množina přirozených čísel je obvykle označována tučným symbolem N nebo N. Výše uvedený přehled čísel je brán z matematického hlediska, ale v oboru počítačových věd existuje jiná terminologie. Pro vyjádření čísla jsou zde určitá omezení, která jsou dána konečným počtem bitů. Z tohoto důvodu, je definováno minimální a maximální číslo a mezi dvěma sousedními čísly je zde určitá mezera. V matematice, kde neexistují omezení, je možné použít čísla v rozsahu od mínus nekonečna do plus nekonečna bez mezery mezi dvěma sousedními čísly. V počítačových vědách se mimo jiné používají následující pojmy: Čísla s pohyblivou řádovou čárkou jsou čísla s desetinnou tečkou a exponentem; odpovídají reálným číslům. Z, celá čísla jsou např.: -2; -1; 0; +1; +2 N, přirozená čísla jsou např.: 0; +1; +2 nebo +1; +2 VŠB-TU Ostrava 46

53 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Čísla s pevnou řádovou čárkou jsou čísla, kde pozice desetinné tečky je definována předem; odpovídají racionálním číslům. Celá čísla odpovídají matematickému vyjádření celých čísel a jsou definovány dva typy čísla se znaménkem a bez znaménka. o celá čísla se znaménkem tvoří množinu celých čísel, Z. o celá čísla bez znaménka odpovídají přirozeným číslům, což je množina N = {0, +1, +2, }. Přesnost vyjádření čísla je problém. Ve vědě o počítačích, můžeme najít i příklady špatných výpočtů, některé z nich byly způsobeny lidmi chybou v návrhu a jiné jsou důsledkem teorie zobrazení čísel. Je známa hardwarová chyba v procesoru, který se prodával [wiki_0507], [Janeba_1995] a [Intel_0501], chyba v tabulkovém program [Microsoft_0501] a [Microsoft_0502]. Další problematické výpočty jsou popsány v [Inernet_0501], [Muller_2010], [Rump_1988]. 5.1 Reference [Inernet_0501] on line [Intel_0501] on line [Janeba_1995] M. Janeba: The Pentium Problem; on line [Microsoft_0501] on line [Microsoft_0502] on line [Muller_2010] J.-M. Muller, N. Brisebarre, F. de Dinechin, C.-P. Jeannerod, V. Lefevre, G. Melquiond, N. Revol, D. Stehle, S. Torres: Handbook of Interchange-Point Arithmetic; Birkhauser Boston, a part of Springer Science+Business Media, LLC 2010; ISBN ; e-isbn [Rump_1988] S. M. Rump. Algorithms for verified inclusion. In R. Moore, editor, Reliability in Computing, Perspectives in Computing, pages Academic Press, New York, [wiki_0501] Real number; online [wiki_0502] [wiki_0503] Rational number; on line Irrational number; on line [wiki_0504] Integer on line VŠB-TU Ostrava 47

54 [wiki_0505] Number; on line Reálná čísla [wiki_0506] Natural line; on line [wiki_0507] Pentium bug; on line [wiki_0508] Guard digit; on line [wiki_0509] Number line; on line [wiki_0510] Real line; on line VŠB-TU Ostrava 48

55 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO 6. Celá čísla Aplikace celých čísel v informatice má některá omezení, která jsou dána binární číselnou soustavou a velikostí slova. Konečná velikost slova způsobuje omezený rozsah vyjádření celého čísla. Celá čísla používají znaménko plus nebo mínus. Tento znak nepatří mezi číslice v číselné soustavě, nicméně existují způsoby jak znak znaménka vyjádřit. Celá čísla obsahují přirozená čísla a záporná čísla V souvislosti s celými čísly (=integer) jsou v počítačových vědách používány následující pojmy: Celé číslo se znaménkem; jedná se o kladné nebo záporné číslo. V počítačích jsou záporná čísla zastoupena především dvojkovým doplňkem a dalšími možnými způsoby zobrazení. Množina přirozených čísel je {0, +1, +2, +3 } Celé číslo bez znaménka; čísla bez znaménka, jsou přirozená čísla nebo čísla nezáporná z množiny {0, 1, 2 }. Binární číselná soustava; je základní způsob vyjádření celých čísel. Dekadická číselná soustava; existují speciální techniky, jak vyjádřit dekadická čísla a jak používat desítkovou číselnou soustavu v počítači. V praxi se používá desítková soustava ve tvaru BCD kódu (Binary Coded Decimal). Celá čísla v binární číselné soustavě jsou nejčastěji používána v počítačích a programovacích jazycích. Aplikace desítkových čísel v počítačích je také možná a je popsána v dalších kapitolách, jedná se hlavně o způsob zobrazování dekadických čísel v BCD kódu. Další popis se soustřeďuje na celá čísla ve dvojkové soustavě a na techniky pro vyjádření znaménka. Pojmy integer nebo int patří do programovacích jazyků, kde definují datové typy. Rozsah jejich reprezentace je definován počtem bitů použitých k zobrazení a tento závisí na implementaci daného programovacího jazyka. Uvědomme si, že je možné používat 64 bitová čísla na 16 bitové architektuře. Programovací jazyky používají pojmy jako: short integer, long, long long, double long integer, kde rozsah zobrazení celého čísla odpovídá počtu použitých bitů a tento počet je dán implementací použitého jazyka. Moderní programovací jazyky začínají používat nové názvy; tyto názvy obsahují počet bitů ve slově, například: int8_t, uint8_t a totéž platí pro 16, 32 a 64 bitů. Zápis int je určen pro celé číslo se znaménkem a uint pro celé číslo bez znaménka. Tyto nové názvy jsou uvedeny v normě ISO / IEC 9899: Tato norma je známá jako C99, C jazykové verze 1999, literatura [wiki_0601]. Tyto nové deklarace mohou být použity v jazyce C [cppref_0601] a [Microsoft_0601]. VŠB-TU Ostrava 49

56 6. Celá čísla 6.1 Celá čísla bez znaménka Jedná se o čísla bez znaménka a tedy o nezáporná čísla, která tvoří následující sadu čísel {0, 1, 2 }. V informatice mají takováto čísla v binární číselné soustavě omezený rozsah, který je dáno počtem bitů ve slově, viz vztah (0601). Minimální číslo je vždy nula. Typické rozmístění bitů ve slově je uvedeno na obr Rozsah celého čísla bez znaménka je 0 až 2 n do 2 n - 1 (0601) kde n je počet bitů ve slově MSB LSB n Pro 8 bitů je rozsah zobrazení od 0 do 255 Potom číslo 129D lze do 8 bitů zobrazit jako B. Obr Celé číslo bez znaménka V deklaraci programovacích jazyků je možné použít celočíselné datové typy bez znaménka: Unsigned integer, kde počet bitů ve slově závisí na typu programovacího jazyka a jeho implementaci; uintx_t, kde x je 8, 16, 32 nebo 64, např. uint32_t je deklarace pro 32 bitové celé číslo bez znaménka; vše je patné pro verzi C99/C a vyšší verze; datové typy v jazyce C: unsigned short int, unsigned long int or unsigned long long int. 6.2 Celé číslo se znaménkem Celá čísla se znaménkem, signed integer, jsou nejdůležitějšími čísly v oblasti počítačových věd a pro jejich zobrazení se využívají speciální postupy a principy. Rozsah zobrazení čísel pak závisí na těchto technikách a pravidlech. Hlavním principem pro vyjádření čísla se znaménkem je dvojkový doplněk, který je používán ve všech počítačích a programovacích jazycích. Možnost zobrazení záporných čísel se využívá u odečítání, kde se operace odečítání nahrazuje přičtením záporného čísla. Avšak, v zobrazení celého čísla se znaménkem se vyskytuje problém s počtem nul. Některé techniky zobrazují dvě nuly kladnou a zápornou, jiné jen jednu nulu kladnou. V programovacích jazycích je celé číslo základním datovým typem a v deklaraci je možné použít následující zápis, který je obdobný zápisu pro celá čísla bez znaménka. Tyto deklarace automaticky předpokládají použití dvojkového doplňku: Signed integer, integer nebo int, kde počet bitů ve slově závisí na programovacím jazyku a jeho implementaci; Signed Integer Celé číslo se znaménkem VŠB-TU Ostrava 50

57 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO intx_t, kde x je 8, 16, 32 nebo 64, např. int32_t platí pro 32 bitové celé číslo se znaménkem; vše je platné pro verzi C99/C verze a vyšší; datové typy v jazyce C: signed short int, signed long int or signed long int. 6.3 Přímý kód Přímý kód sign and magnitude, je zobrazení, které pro zobrazení znaménka používá speciální bit, ve většině případů se jedná o bit MSB. Slovo je rozděleno na dvě části, první část je určena pro znaménko (sign) a druhá část je pro zobrazení absolutní hodnoty celého čísla (magnitude). Znaménko se kóduje principem, že kladnému číslu je přiřazena 0 a zápornému číslu je přiřazena 1. Zmíněný princip kódování znaménka potom umožňuje mít dvě nuly, kladnou a zápornou. Rozsah zobrazení je dán vztahem (0602) a typická organizace slova je znázorněna na obr , literatura [wiki_1102]. Kde -(2 n-1-1) do + (2 n-1-1) (0602) Sign and magnitude Přímý kód Rozsah přímého kódu -(2 n-1-1) až +(2 n-1-1) n je počet bitů ve slově. MSB LSB n Pro 8-bitů je rozsah od -127 do Číslo +11 D je zakódováno jako B Číslo -11 D je zakódováno jako B Znaménko Absolutní hodnota Kladná nula (+0) je B Záporná nula (-0) je B Obr Zobrazení čísla v přímém kódu Pro převod záporného čísla do přímého kódu lze použít matematickou definici, formule (0603) nebo logickou definici podle vzorce (0604). Kladné číslo se nekóduje, jenom se zobrazí do n-bitového slova. SM A = 2 n-1 + A (0603) SM A = 2 n-1 bitwiseor (A) (0604) Kde SM A je číslo v přímém kódu, sign and magnitude; n je počet bitů k reprezentaci; bitwiseor je logická operace OR po bitech. Příklady Vyjádřete v přímém kódu následující dekadická čísla (v 8 bitech): a) (110) 10 Výsledek: ( ) 2 VŠB-TU Ostrava 51

58 6. Celá čísla b) (-110) 10 Výsledek: ( ) 2 c) (51) 10 Výsledek: ( ) 2 d) (-51) 10 Výsledek: ( ) 2 e) (85) 10 Výsledek: ( ) 2 f) (-85) 10 Výsledek: ( ) Jednotkový doplněk (inverzní kód) Pomocí jednotkového doplňku je možné vyjádřit záporné číslo, [wiki_0602]. Tento doplněk je definován dvěma možnými způsoby, matematicky (0605) a logicky (0606). Vzorce jsou určeny pro n-bitové slovo, kde MSB bit je vždy znaménkový bit, obr Pro kladné číslo je znaménkový bit roven 0 a v případě záporného čísla je roven 1. Ones complement Rozsah zobrazení jednotkového doplňku je symetrický (0607). Jednotkový doplněk má dvě nuly, kladnou a zápornou. V současné době se jednotkový doplněk používá velmi málo, protože při operacích sčítání a odčítání je v některých případech nutné korigovat výsledek přičtením jedničky tzv. kruhový přenos. Další podrobnosti jsou uvedeny v literatuře [wiki_0603]. Rozsah jednotkového doplňku -(2 n-1-1) až +(2 n-1-1) 1 A = 2 n A (0605) 1 A = ~ A (0606) -(2 n-1-1) do + (2 n-1-1) (0607) Jednotkový doplněk 1 A= 2 n A 1 A = ~A Kde 1 A - je označení jednotkového doplňku; A - je kladná hodnota, pro kterou je jednotkový doplněk počítán; n - je počet bitů ve slově; ~ - (znak tilda) je v jazyce C označení pro negaci. MSB LSB n Znaménko Pro 8-bitů je rozsah od -127 do Číslo +11 D je kódováno jako B Číslo -11 D je kódováno jako B Kladná nul (+0) je B Záporná nula (-0) je B Obr Jednotkový doplněk Příklady Vyjádřete v inverzním kódu následující dekadická čísla (v 8 bitech): a) (110) 10 Výsledek: ( ) 2 b) (-110) 10 Výsledek: ( ) 2 c) (51) 10 Výsledek: ( ) 2 VŠB-TU Ostrava 52

59 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO d) (-51) 10 Výsledek: ( ) 2 e) (85) 10 Výsledek: ( ) 2 f) (-85) 10 Výsledek: ( ) Dvojkový doplněk (doplňkový kód) Dvojkový doplněk je další způsob vyjádření čísel čísla se znaménkem v binární číselné soustavě. Taktéž je definován matematicky a logicky, vztahy (0608) a (0609) pro n-bitové slovo, literatura [wiki_0602] a [wiki_0604]. MSB je znaménkový bit, který je roven Two s complement 1 pro záporné číslo a 0 pro kladné číslo, viz obr Dvojkový doplněk má pouze jednu nulu a to kladnou. Dvojkový doplněk se dnes používá ve všech počítačových architekturách a programovacích jazycích. 2 A = 2 n - A (0608) 2 A = 1 A + 1 = ~A + 1 (0609) -(2 n-1 ) do + (2 n-1-1) (0610) Dvojkový doplněk 2 A= 2 n - A 2 A = 1 A + 1 = ~A + 1 Kde 2 A - je označení dvojkového doplňku; 1 A - je označení jednotkového doplňku; A - je kladné číslo, pro které je dvojkový doplněk počítán n - je počet bitů ve slově. ~ je v programovacím jazyce C označení pro negaci Pouze jedná nula, kladná nula Rozsah dvojkového doplňku -(2 n-1 ) až + (2 n-1-1) MSB n Znaménko 0 mínus 1 plus LSB Pro 8-bitů je rozsah od -128 do +127 Číslo +11 D je kódováno jako B Číslo -11 D je kódováno jako B Pouze jedna nula B (kladná) Obr Dvojkový doplněk Poznámka k terminologii doplňků. Doplněk je kód, který představuje záporné číslo. Proto všechny výše uvedené vzorce používají pro vytvoření kódu kladné číslo. Například 0101B představuje číslo 5 a 1011B představuje číslo -5. Příklady VŠB-TU Ostrava 53

60 6. Celá čísla Vyjádřete v doplňkovém kódu následující dekadická čísla (v 8 bitech): a) (110) 10 Výsledek: ( ) 2 b) (-110) 10 Výsledek: ( ) 2 c) (51) 10 Výsledek: ( ) 2 d) (-51) 10 Výsledek: ( ) 2 e) (85) 10 Výsledek: ( ) 2 f) (-85) 10 Výsledek: ( ) Převod do dvojkového doplňku Převod do dvojkového doplňku je možný pomocí vztahů (0608), (0609), které mohou být použity pouze v případě, že číslo je v rozsahu zobrazení viz (0610). To znamená, že první bit je znaménkový a ve zbývajících bitech je zobrazena hodnota daného čísla. Na logické úrovni, nebo v počítači, kde chybí operace odčítání, je nutné použít vztah (0609), který je známý jako "not B + 1". V tomto vztahu je not B jednotkový doplněk a také bitová operace NOT, která se realizuje pomocí hradel - invertor. Přičtení 1 (jednobitová informace) se většinou provádí u sčítačky přes vstup určený pro vstupní přenos. Postup při převodu dekadického čísla na dvojkový doplněk je znázorněn na obr Nejdříve se číslo převede z desítkové do dvojkové číselné soustavy a potom se počítá dvojkový doplněk podle vztahu not B plus 1. Dekadické číslo -50 vyjádřete ve dvojkovém doplňku pomocí 8 bitů: 50 D = B Not B, jednotkový doplněk: B Plus 1 je: B -50 D = B = 0xCE Not B plus 1 Obr Převod do dvojkového doplňku pomocí not B plus 1 Dekadické číslo -50 vyjádřete ve dvojkovém doplňku pomocí 8 bitů: D = 206 D 206 D = B = 0xCE -50 D = B = 0xCE 2 n - A Obr Převod do dvojkového doplňku pomocí 2 n A Na obr je převod do dvojkového doplňku proveden aplikováním vztahu (0608) v desítkové aritmetice. Dvojkový doplněk je vypočítán v desítkové soustavě jako číslo, které je následně převedeno do binární číselné soustavy. VŠB-TU Ostrava 54

61 6.7 Převod z dvojkového doplňku Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Opět platí, že existuje několik způsobu převodu. U prvního způsobu převedeme kód záporného čísla na binární kladné číslo pomocí vztahu not B + 1. Poté použijeme polynom číselné soustavy pro převod z binární do desítkové soustavy, viz obr V případě kladných čísel, změna ze záporných na kladná čísla chybí. V druhém případě je nutno zvládat binární aritmetiku a aplikovat vztah (0608), kdy se od hodnoty 2 n odečítá 2 A. Vztah (0608), má význam "not B + 1", obr bitový dvojkový doplněk 0x8C převeďte na dekadické číslo 0x8C = B Not B, je: B; 0x73 Plus 1 je: B, 0x B = 74 H = 7* = 116 D Dvojkový doplněk: 2 8C H = -116 D not (B) + 1 Obr Převod dvojkového doplňku do dekadické soustavy pomocí not B plus 1 8-bitový dvojkový doplněk 0x8C převeďte na dekadické číslo 2 n = 0x100 2 n - 2 A = 0x100 0x08C =0x074 0x74 = 7 * = 116 D Dvojkový doplněk: 2 0x8C = -116 D 2 n - 2 A Obr Převod dvojkového doplňku do dekadické soustavy pomocí 2 n - 2 A U třetího způsobu jde o přímý převod čísla z dvojkového doplňku na dekadické číslo, tento převod je dán vztahem (0611). Vypadá to jako klasický polynom číselné soustavy. Rozdíl je však v prvním prvku polynomu, který vyjadřuje záporné znaménko v MSB bitu, obr a n 1 2 n 1 + a n 2 2 n 2 + a = a n 1 2 n 1 + n 2 i=0 a i 2 i (0611) Kde a i je počet binárních číslic; n je počet bitů ve slově. Polynom a n 1 2 n 1 + n 2 i=0 a i 2 i 8-bitový dvojkový doplněk 0x8C převeďte na dekadické číslo 0x8C = B -1* * * * * * * *2 0 = = Dvojkový doplněk: 2 0x8C = D Obr Převod dvojkového doplňku do dekadické soustavy pomocí polynomu VŠB-TU Ostrava 55

62 6.8 Kód s posunutou nulou offset binary 6. Celá čísla Kód s posunutou nulou má ekvivalentní anglické názvy offset Binary, excess-k or biased number. Jedná se o kód pro vyjádření celého čísla se znaménkem nebo bez, kde minimální hodnota odpovídá nulové hodnotě kódu offset binary a maximální hodnota potom maximální hodnotě offset binary, literatura [wiki_0602] a [wiki_0605]. Základní princip binárního posuvu je znázorněn na obr Tento princip zobrazení záporných čísel se používá v D/A nebo A/D převodníku a v pohyblivé řádové čárce pro zobrazení exponentu. Kód s posunutou nulou Offset binary Excess-K Číselná osa Minimální číslo Maximální číslo Biased number Offset binary Posuv, b 0 2 n -1 Pro n-bitové zobrazení Obr Základní princip binárního posuvu - Biased number Vztah (0612) je matematickou definicí kódu s posunutou nulou s hodnotou posunutím b. Posuv b může být libovolné číslo, a toto číslo posouvá rozsah zobrazení na číselné ose. V informatice jsou používány pro n-bitové slovo dvě definice posuvu. Teoreticky, hodnota posunutí může být libovolné číslo a hodnota posuvu 2 n-1-1 se používá při zobrazení čísel v pohyblivé řádové čárce podle IEEE 754, [IEEE ]. Rozsah zobrazení čísla v offset binary je dán vztahem (0613). B A = A + b (0612) Plus nekonečno Biased exponent v pohyblivé řádové čárce je tento kód Kde -(b) do +(2 n 1 - b) (0613) B A je posunuté číslo a musí být přirozeným číslem N, ( B A 0); A je celé číslo, pro které se binární posuv vypočítává. Číslo A je kladné nebo záporné; b je posuv (také označován jako offset nebo bias), ve standardu IEEE 754 pro pohyblivou řádovou čárku je bias 2 n-1-1, pro n-bitový exponent. Dekadické číslo Offset Binary pro 8 bitů Dvojkový doplněk Posuv b je : : : Rozsah zobrazení b do + (2 n -1 - b) Pro 8 bitové slovo je rozsah : : : -128 to Posunuté číslo B A je celé číslo bez znaménka Posuv je 2 n-1 Obr Vztah mezi offset binary s posunutím 128 a dvojkovým doplňkem VŠB-TU Ostrava 56

63 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Definice posuvu 2 n-1 se vyznačuje tím, že čísla zobrazená s tímto posutím mají MSB bit roven 0 pro záporná čísla a 1 pro kladná čísla. Po negaci MSB bitu vznikne dvojkový doplněk, viz obr Převod do dvojkového doplňku může být vhodný pro výkon aritmetických operací nad čísly s posutím. Dekadické číslo Binární posuv pro 8 bitů Dekadická hodnota binárního posuvu Bias b je : : : Rozsah zobrazení (2 n-1-1) to + (2 n-1 ) Pro 8 bitové slovo je rozsah : : : to Posuv je 2 n-1-1 Obr Hodnoty kódu offset binary s posunutím 127 Standard IEEE 754 definuje formáty pro zobrazení desetinného čísla. Jedno ze tří polí tohoto formátu je určeno pro vyjádření exponentu, který se zobrazuje v kódu s posunutou nulou. Standard používá přímo označení bias exponent namísto offset binary nebo Excess-K. Rozsah zobrazení je dán vztahem (0614) pro n-bitové slovo. Kódování biased exponent v 8- bitovém poli, které je použité v 32-bitovém slovu zobrazující číslo v pohyblivé řádové čárce je uvedeno na obr Kde -(2 n-1-1) do +(2 n-1 ) (0614) Bias 2 n-1-1 je používán pro vyjádření exponentu v pohyblivé řádové čárce. n je a počet bitů v bias exponentu. 6.9 Převod z a do kódu s posunutou nulou Převod čísla z a do kódu s posunutou nulou je dán vztahem (0612), B A = A + b. Tento vztah může být použit pro kteroukoli číselnou soustavu, viz příklad na obr Když b= 127 Když b = 127 Výpočet Použitý vzorec A = +38 B A = 165 B A = = 165 A = -38 B A = 89 B A = = 89 B A = A + b B A = 240 A = 113 A = = 113 B A = 14 A = -113 A = = A = B A - b Obr Příklad převodu z a do kódu s posunutou nulou Příklady: Vyjádřete v kódu s posunutou nulou následující dekadická čísla (n = 8 bitů): a) (110) 10 Výsledek: ( ) 2 VŠB-TU Ostrava 57

64 6. Celá čísla b) (-110) 10 Výsledek: ( ) 2 c) (51) 10 Výsledek: ( ) 2 d) (-51) 10 Výsledek: ( ) 2 e) (85) 10 Výsledek: ( ) 2 f) (-85) 10 Výsledek: ( ) BCD čísla Desítková číselná soustava je pro člověka běžnou záležitostí používanou v každodenním životě. Obdobně to platí pro binární soustavu, která je běžně používána v počítačovém světě, zde je však omezení pro zobrazované číslo na konečnou délku slova. Jak Binary-coded Decimal bylo zmíněno v dřívější kapitole, při zobrazování desetinných čísel v počítačích mohou být generovány chyby, které je možné odstranit pomocí dekadické aritmetiky a dekadických čísel. Pro zobrazení desítkové poziční soustavy se používá BCD kód Binary-coded Decimal. V literatuře je možno nalézt další modifikace, [wiki_0606], [DEC_PDP11] a [DEC_VAX]. Dekadické číslice BCD kód Znaménko Binární č. Hex. č A B C Preferováno D Preferováno E Bez znaménka 1111 F Obr Definice BCD kódu Číslo v BCD kódu se umísťuje do nibblu (4-bitová skupina) Kódování Dekódování Obr Převod čísla z a do BCD kódu (kódování a dekódování) BCD kód je definován tabulkou na obr , kde každá dekadická číslice v rozmezí 0 až 9 je vyjádřena pomocí 4-bitového binárního čísla. Z 16 možných kombinací je využito jen deset, zbývající kombinace nejsou využity, případně mohou sloužit k vyjádření znaménka. Tato skupina čtyř bitů se nazývá nibble a byte má 2 nibble. Když dekadické číslo má více řádů, pak každý dekadický řád je kódován zvlášť do jednoho nibble. Potom všechny nibbly jsou uspořá- Číslo v BCD kódu formát řetězce - string VŠB-TU Ostrava 58

65 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO dány vedle sebe a tvoří řetězec. Obr představuje převod čísla do a z BCD kódu. Dekódování znamená, že řetězec je rozdělen na jednotlivé nibbly (každý nibble má 4 bity) a převede se na desítkovou číslici. Poznámka k principu Každé číslo v rozsahu 0 až 15 může být vyjádřeno součtem čísel 8, 4, 2 a 1. Například 13 je součtem čísel a vyjádřeno v binárním kódu to odpovídá Čísla jsou umístěna do bytu dvěma způsoby, a to buď pomocí zhuštěného nebo rozvinutého formátu se znaménkem nebo bez znaménka. Číslo v BCD kódu je chápáno jako řetězec, a proto počet vah je proměnlivý, [DEC_VAX]. Terminologie vztahující se k číslům v BCD kódu je v informatice následující: Packed format - zhuštěný formát čísel v BCD kódu znamená, že každý nibble v bytu nebo slově se používá. Situace je znázorněna na obr Do bytu se umísťují 2 dekadické číslice, tzn., že jsou využity oba nibbly. Ve slově je každý nibble využit pro vyjádření dekadické číslice nebo znaménka v BCD kódu. Unpacked format - rozvinutý formát čísel v BCD kódu znamená, že do jednoho bytu je umístěna pouze jedna číslice, do nejnižšího nibble. Vyšší nibble je roven nule. Ve slově je každý byte použit pro jednu číslici v BCD kódu nebo pro znaménko. MSB LSB Dekadické číslo je -935 Znaménko Preferovaný kód pro znaménko Hex C - plus Hex D - mínus Hex F bez znaménka Packed format Obr Zhuštěný formát se znaménkem v 16-bitovém slově MSB LSB Dekadické číslo je +3 Znaménko Preferovaný kód pro znaménko Hex C - plus Hex D - mínus Hex F bez znaménka Unpacked format Obr Rozvinutý formát se znaménkem v 16-bitovém slově Signed BDC - čísla v BCD kódu se znaménkem. Tato čísla využívají princip přímého kódu sign and magnitude. Jeden nibble je určen pro znaménko a ve většině případů se jedná o nejméně významný nibble. Znaménko je vyjádřeno pomocí kombinace, která je vyšší než 9. Preferována je kombinace pro znaménko plus - hex C, a pro znaménko mínus je to hex D, obr a obr Tento princip je odvozen od účetního hlediska (C - Credit a D -Debet). VŠB-TU Ostrava 59

66 6. Celá čísla Unsigned BCD - čísla v BCD kódu bez znaménka. Řetězec obvykle obsahuje kombinaci hex F na pozici nejméně významném nibblu jako vyjádření formátu bez znaménka, [IBM_370], [DEC_PDP11] a [DEC_VAX]. Rozsah zobrazovaného čísla v BCD kódu je dán počtem použitých nibblů, viz vztahy (0615) a (0616). Kde Pro čísla bez znaménka 0 až (10 n-1-1) (0615) Pro čísla se znaménkem -(10 n-1-1) až +(10 n-1-1) (0616) n je počet použitých nibblů včetně s nebo bez znaménka Příklady 1) Vyjádřete v BCD kódu následující dekadická čísla (v 16 bitech) ve zhuštěném formátu se znaménkem: a) (110) 10 Výsledek: ( ) b) (-110) 10 Výsledek: ( ) c) (51) 10 Výsledek: ( ) d) (-51) 10 Výsledek: ( ) e) (85) 10 Výsledek: ( ) f) (-85) 10 Výsledek: ( ) 2) Vyjádřete v BCD kódu následující dekadická čísla (ve 32 bitech) v rozvinutém formátu se znaménkem: g) (110) 10 Výsledek: ( ) h) (-110) 10 Výsledek: ( ) i) (51) 10 Výsledek: ( ) j) (-51) 10 Výsledek: ( ) k) (85) 10 Výsledek: ( ) l) (-85) 10 Výsledek: ( ) 6.11 Desítkový doplněk Desítkový doplněk je kód, který je vhodný pro reprezentaci záporných čísel nebo pro odčítání v desítkové číselné soustavě. Tento doplněk je definován logickým vzorcem (0617), devítkový doplněk plus 1. Devítkový doplněk se definuje záměnou číslic podle formule (0618). Matematická definice desítkového doplňku je dána vztahem (0619), literatura [wiki_0607]. 10 A = 9 A + 1 (0617) 10 A = 10 n - A 9 A: 0 9, 1 8, 2 7, 3 6, 4 5, 5 4, 6 3, 7 2, 8 1, 9 0 (0618) 10 A = 10 n - A (0619) VŠB-TU Ostrava 60

67 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Kde A je kladné číslo, pro které se doplněk počítá; 9 A je devítkový doplněk A, je definovaný vztahem (0616), kde číslice 0 je nahrazena číslicí 9, číslice 1 je nahrazena číslicí 8, číslice 2 nahrazuje 7, atd.; 10 A je desítkový doplněk A; n je řád. Desítkový doplněk může být použit v aritmetice, představuje dekadické číslo se znaménkem. Pokud je desítkový doplněk použit k vyjádření čísel se znaménkem, pak je nutné definovat znaménkový nibble. Jeho hodnota definuje kladné nebo záporné číslo. Pokud je hodnota 0, pak jde o kladné znaménko a záporné znaménko určuje hodnota 9. Příklady Vyjádřete v desítkovém doplňku následující dekadická čísla: a) (-110) 10 Výsledek: 10 A = 890 b) (-51) 10 Výsledek: 10 A = 49 c) (-85) 10 Výsledek: 10 A = Reference [DEC_VAX] VAX780 Architecture handbook; Digital Equipment Corporation, 1977; ( on line ) [DEC_PDP11] PDP11 processor handbook, PDP11/04/34a/44/60/70; Digital Equipment Corporation, 1979; ( on line ) [cppref_0601] Fixed width integer types (since C++11); on line [IBM_370] IBM System/370 Principles of Operation, IBM, March 1980 [IEEE ] IEEE Std , IEEE Standard for Interchange-Point Arithmetic, 29 August 2008, revision of IEEE [Internet_0601] Natural numbers; Numbers.htm; on line [Microsoft_0601] XMINT4.XMINT4(int32_t, int32_t, int32_t, int32_t) constructor; on line [proofwiki_0601] Definition: Natural Numbers; on line VŠB-TU Ostrava 61

68 6. Celá čísla [wiktionary_0601] Numeral numbers; on line [wiki_0601] C data types; on line [wiki_0602] [wiki_0603] [wiki_0604] [wiki_0605] [wiki_0606] [wiki_0607] [wiki_0608] Signed number representations; on line Ones' complement; on line Two's complement; on line Offset binary; on line Binary-coded decimal; on line Method of complements; on line Natural numbers; on line VŠB-TU Ostrava 62

69 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO 7. Aritmetické operace pro celá čísla Základní aritmetické operace jsou sčítání, odčítání, násobení a dělení. V počítači jsou tyto operace prováděny pomocí aritmeticko-logické jednotky (ALU - Arithmetic Logic Unit), která je součástí procesoru. Algoritmus pro provádění těchto operací závisí na principu zobrazení záporných číslech a na velikosti slova v ALU. Některé výsledky operací mohou být mimo rozsah zobrazení, tuto situaci nazýváme přetečení. Každý procesor má status registru, který obsahuje příznaky charakterizující vlastnosti výsledků. V počítači jsou základní aritmetické operace realizovány pomocí logických obvodů, jako jsou kombinační obvody nebo synchronní digitální systémy založené na konečných automatech (FSM- Finite State Machine). Počet bitů v ALU, může být od jednoho bitu do n-bitů. Například, jednobitová aritmetická jednotka se používá, když jsou operandy ve formě sériového toku, poté aritmeticko-logická jednotka musí být navržena jako synchronní digitální systém. Sčítání, odčítání a násobení mohou být realizovány jako kombinační obvody AND/OR nebo synchronní digitální systémy. Operace dělení je vždy realizována pomocí synchronního digitálního systému s FSM. Operandy mohou být vyjádřeny v různých kódech s anebo bez znaménka. Vzhledem k tomu, že součástí každého procesoru je binární sčítačka, je nezbytné definovat algoritmus aritmetických operací s těmito operandy. Například operandy vyjádřené v binárním posuvu jsou sčítány pomocí binární sčítačky, také čísla v BCD kódu jsou sečteny pomocí binární sčítačky a tak dále. Volba realizace závisí na definici architektury procesoru a také na době potřebné pro výpočet operace, což se označuje jako zpoždění operace. Proto existuje mnoho způsobů realizací, které se liší počtem použitých hradel a časem výkonu operace. 7.1 Příznaky operací (Flag) Příznaky charakterizující výsledek operace můžeme najít v každém počítači, [wiki_0701]. Příznaky jsou umístěny ve stavovém registru procesoru. Přesná terminologie závisí na architektuře procesoru a výrobci. Základní příznaky jsou: negative záporné číslo, zero nulový výsledek, overflow - přetečení a carry - přenos do vyššího řádu. Následující popis se zaměřuje pouze na sčítání, kde nastavení je jednoznačné. V ostatních aritmetických operacích existují rozdíly, které závisí na architektuře procesoru a instrukční sadě. Poznámka k rozsahu zobrazení Rozsah zobrazení pro celá čísla bez znaménka je od 0 do 2 n -1 a pro dvojkový doplněk je od - (2 n-1-1) do + (2 n-1-1). Příznaky aritmetických operací VŠB-TU Ostrava 63

70 7. Aritmetické operace pro celá čísla Příznak N negative (nebo S - sign). Příznak N je někdy označován jako příznak S a odpovídá MSB bitu vypočteného výsledku, [wiki_0702]. Je-li výsledek chápán jako dvojkový doplněk, pak příznak N nebo S je znaménkový bit. Jinými slovy, pokud výsledek operace je záporný příznak N = 1. Příznak Z - zero. Příznak Z označuje nulový výsledek a je nastaven (tzn. Z = 1) pokud výsledek je nulový, [wiki_0703]. Tedy všechny bity ve výsledku jsou rovny 0. Příznak V - overflow. Tento příznak je pro přetečení (overflow), [wiki_0704], [DEC_PDP11], [Internet_0701]. V = 1 pokud výsledek operace je mimo rozsah zobrazení. Vyskytuje se především při operacích sčítání a odčítání, a předpokládá se aplikace operandů v dvojkovém doplňku. V případě binárního sčítání A + B ve dvojkovém doplňku, může dojít k situaci, kdy je záporný výsledek vytvořen sčítáním kladných operandů. To platí i naopak. Uvedené formulace lze potom zapsat následovně, že přetečení nastane, pokud (+A) + (+B) = C nebo ( A) + ( B) = +C. V případě odčítání A - B ve dvojkovém doplňku, přetečení nastává v situaci, kdy operandy mají opačná znaménka a znaménko operandu B je stejné jako znaménko výsledku. Přetečení nastane v situacích, když (+A) ( B) = C nebo ( A) (+B) = +C. Příznak C - carry. Tento příznak představuje přenos z MSB bitu do vyššího řádu, [wiki_0705]. Následující vysvětlení je zaměřeno pouze na sčítání. V případě odčítání má příznak carry dvě definice, které závisí na architektuře procesoru. Pro sčítání, se uplatňují tato pravidla: V případě sčítání je příznak carry roven výstupnímu přenosu z MSB bitu. V případě sčítání, nastavení příznaku carry signalizuje přetečení pro unsigned integer, celá čísla bez znaménka. N záporný výsledek Z nulový výsledek V přetečení u dvojkového doplňku C přetečení pro celá čísla bez znaménka 7.2 Znaménkové rozšíření Znaménkové rozšíření je operace pouze se znaménkem a používá se v situaci, kdy je n-bitové číslo umístěno v m-bitovém slově a přitom m je vyšší než n, [wiki_0706]. Například, původní 8-bitové číslo se znaménkem se umísťuje do 16-bitového slova. Hodnota musí zůstat stejná, to znamená, že znaménkový bit čísla musí být zkopírován do nových vyšších bitů, obr Když je číslo záporné, pak se do všech vyšších bitů dává hodnota 1: Toto přidání jedniček nemění původní hodnotu čísla Znaménkové rozšíření Obr Znaménkové rozšíření VŠB-TU Ostrava 64

71 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO MSB LSB 0 0 Aritmetický posuv o jedno místo doprava Obr Znaménkové rozšíření pomocí aritmetického posuvu vpravo Jednou z možností pro znaménkové rozšíření je použití aritmetického posuvu doprava. Tento posuv zkopíruje znaménko na nový znaménkový bit; to znamená, že hodnota znaménka zůstává stejná. Výkon rozšíření spočívá, že 8-bitové číslo se umístí do horního bytu 16-bitového slova a potom se aplikuje 8 krát aritmetického posuvu doprava. Tento posuv je proveden 8krát, obr Výsledkem je, že horní byte obsahuje znaménkové rozšíření a nižší byte obsahuje původní 8-bitové číslo se znaménkem. 7.3 Sčítání čísel bez znaménka a v dvojkovém doplňku Sčítání v binární číselné soustavě má stejné principy jako v desítkové číselné soustavě. Jen se nesmí zapomenout, že se rovná 10 ve dvojkové číselné soustavě a binárnímu číslu 10 odpovídá dekadické číslo 2. Každá bitová pozice sčítá tři hodnoty, dvě hodnoty operandů plus přenos z nižšího řádu nebo bitu. Každá bitová pozice generuje dva výstupy, součet a přenos do vyššího řádu. Tento postup je stejný pro každou bitovou pozici, a to je základní myšlenka realizace hardwaru, viz samostatná kapitola = 10 B V počítači je velikost sčítačky dána počtem n-bitů a pouze těchto n-bitů může být použito pro vyjádření čísel. Součet v počítači je potom definován vztahem (0701). Tento vztah generuje n-bitový výsledek a pro každé sčítání generuje i příznaky, které tento výsledek popisují. Popsaný princip je nezávislý na počtu bitů ve slově. Tento vztah zajišťuje, že výsledek nebude mít nikdy více bitů než požadovaných n-bitů. Kde S = A + B mod 2 n (0701) S je výsledek sčítání n-bitového slova; A, B jsou operandy, znaménkové rozšíření na n-bitovém slovu; n je počet bitů ve slově. Přenos je hodnota do dalšího bitu Poznámka k binárnímu sčítání V dekadické číselné soustavě platí: V binární číselné soustavě platí: = = = = = = 100 : : V každém řádku hodnota výsledku musí být shodná u obou číselných soustav. VŠB-TU Ostrava 65

72 7. Aritmetické operace pro celá čísla V následujících příkladech je použita 4-bitová aritmetika a tedy i 4-bitová čísla. Na příkladech je také vysvětleno nastavení příznaků N, Z, V, C s podrobným komentářem. Obr Pokud operandy chápeme jako čísla bez znaménka, potom výsledek součtu je 16. Avšak, výsledek je mimo rozsah zobrazení celých čísle bez znaménka, proto příznak C carry, přenos je nastaven. Pokud se předpokládá, že operandy jsou ve dvojkovém doplňku, potom výsledek je správný a příznak V není nastaven. Kontrola v dekadické soustavě Binárně Bez znaménka doplněk Dvojkový Operand A Operand B Součet S 0000 N=0, Z=1, V=0, C=1 0 0 Přenos 1 Obr Přenos u celých čísel bez znaménka Příznak N je MSB bit Obr Pokud operandy chápeme jako čísla bez znaménka, potom výsledek je správný a příznak C není nastaven. Ale pokud operandy chápeme ve dvojkovém doplňku, potom výsledek je chybný. Správný výsledek součtu je +9, který je mimo rozsah zobrazení, a proto příznak V overflow, přetečení je nastaven. Jedná se o situaci, kdy součet dvou kladných čísel generuje záporný výsledek. Rozsah zobrazení dvojkového doplňku pro 4 bity je -8 až +7 a správný výsledek je mimo rozsah. A naopak, součet dvou záporných čísel generuje kladný výsledek. Například situace 1100 B B = 0110 B. Výsledek je opět chybný v obou případech, v případě čísel bez znaménka dochází k přetečení, a i v případě čísel v dvojkovém doplňku dochází opět k přetečení. Příznak Z je nataven, když výsledek je nulový Kontrola v dekadické soustavě Binárně Bez znaménka doplněk Dvojkový Operand A Operand B Součet S 1001 N=1, Z=0, V=1, C=0 9?-7 Přenos 0 Obr Přetečení v případě dvojkového doplňku Obr ukazuje situaci součtu dvou 8-bitových čísel na 4-bitové binární sčítačce. Nejdříve je nutno sečíst nižší nibble s vstupním přenosem 0 (carry in). Tento součet však generuje výstupní přenos (carry out), který se uloží do příznaku C carry. Při součtu vyšších nibblů se příznak C stává vstupním přenosem (carry in). Tímto principem je zajištěn přenos mezi nibbly. Tento princip je možné aplikovat na libovolné počty bitu, například součet dvou 32-bitových slov na 8-bitové binární sčítače. Příznak C potom zajišťuje přenos mezi byty. Z pohledu hardware, je tento součtu realizován pomocí synchronního digitálního systému s FSM. VŠB-TU Ostrava 66

73 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO 8-bitový operand A bitový operand B Součet nižších nibblů Součet vyšších nibblů Binárně Binárně Carry in 0 1 Operand A Operand B Součet S 0011 N=0, Z=0, 0111 N=0, Z=0, Přenos 1 V=1,C=1 0 V=0,C=0 Obr Součet dvou 8-bitových čísel pomocí dvou 4-bitových součtů 7.4 Odčítání čísel bez znaménka ve dvojkovém doplňku Binární odčítání jako matematická operace je dána stejným algoritmem jako v desítkové číselné soustavě. Odčítání, kde je znaménko vyjádřeno samostatně, je popsáno v podkapitole zabývající se sčítáním v přímém kódu. Pouze sčítání používá termín přenos (carry) jako vstupní hodnotu pro další řády, odčítání používá termín půjčka (borrow). Odečítání může být také definováno jako přičtení záporného čísla, vzorec (0702) a záporné číslo je pak vyjádřeno jako doplněk. Metoda doplňku je využívána především v počítačích. V případě binární číselné soustavy je používán dvojkový doplněk, záporné číslo (-B) se převádí na dvojkový doplněk. Kde A - B = A + (-B) = A + 2 B = A + not B + 1 (0702) A, B jsou binární operandy; 2 B je dvojkový doplněk B; not B je bitwise negace operandu B. Kontrola v dekadické soustavě Binárně Binárně Číslo bez Dvojkový znaménka doplněk Operand A Operand B >2-doplněk> Součet S 0010 N=0, Z=0, 2 2 Přenos 1 V=0, C=? Obr Odčítání Obrázky 07-06, a ukazují postup při operaci odčítání, kde operand B je převeden na dvojkový doplněk a pak je přičten k operandu A. V případě, že operandy jsou ve dvojkovém doplňku a příznak V overflow není generován, potom výsledek je správný. Pokud je příznak V overflow nastaven, je výsledek rozdílu chybný. Příznak C carry se v případě rozdílu nastavuje podle architektury procesoru, viz literatura [DEC_PDP11], [DEC_VAX] and [Intel_0701]. VŠB-TU Ostrava 67

74 7. Aritmetické operace pro celá čísla Kontrola v dekadické soustavě Binárně Binárně Číslo bez Dvojkový znaménka doplněk Operand A Operand B >2-doplněk> Součet S 1110 N=0, Z=0,?? -2 Přenos 0 V=0, C=? Obr Odčítání, výsledek je záporné číslo Kontrola v dekadické soustavě Binárně Binárně Číslo bez Dvojkový znaménka doplněk Operand A Operand B >2-doplněk> Součet S 1101 N=0, Z=0,???? Přenos 0 V=1, C=? Obr Odčítání a přetečení 7.5 Sčítání a odčítání v přímém kódu Čísla se znaménkem, které zobrazují pomocí přímého kódu, mají MSB bit určen pro znaménko a zbývající bity jsou pro zobrazení absolutní hodnoty čísla. Provádění operace sčítání a/nebo odčítání závisí na typu sčítačky v procesoru. Za prvé, je možné použít binární sčítačku a dvojkového doplňku; za druhé, je použita speciální sčítačka s algoritmem pro sčítání a/nebo odčítání v přímém kódu. Rozdíl mezi přímým kódem a dvojkovým doplňkem pro 4-bitovou definici je zobrazen na obr , kde můžeme vidět, převod přímého kódu do dvojkového doplňku pomocí algoritmu (not B plus 1). Před převodem, je pouze nutné nulovat znaménkový bit, obr Sign and magnitude Dekadické číslo se znaménkem Přímý kód Dvojkový doplněk : : Obr Převod čísla do přímého kódu a do dvojkového doplňku VŠB-TU Ostrava 68

75 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Když A S = 0, pak 2 A= S A Když A S = 1, pak A S=0, 2 A = not ( S A) + 1 Kde S A je přímý kód čísla A A S je znaménko čísla v přímém kódu 2 A je dvojkový doplněk Obr Algoritmus převodu Operace sčítání a/nebo odčítání v přímém kódu je popsána formou grafu, který je znázorněn na obr , literatura [Kaps_2013]. Praktická realizace tohoto algoritmu se provádí pomocí kombinačního obvodu nebo synchronního digitálního systému, kde graf popisuje chování řídící jednotky jako konečný automat. Základní kroky jsou: Použijte správný vstup, v případě odčítání se neguje znaménko. Provede se větvení, podle hodnoty znaménka a absolutní hodnoty operandů (magnitude) První cesta, je součet dvou operandů se stejným znaménkem. Druhá cesta, je rozdíl dvou operandů, kde absolutní hodnota A je vyšší než B. Třetí cesta, absolutní hodnota A je rovna B, pak je výsledek kladná nula. Čtvrtá cesta, je odečtení dvou operandů, kde absolutní hodnota A je menší než B. Sčítání A + B A S = B S T S M = A M + B M S S = A S F A M > B M S M = A M - B M S S = A S Odčítání A - B B S = not B S F T S M = 0 S S = 0 Kde T F A M = B M ❶ ❷ ❹ A, B jsou operandy v přímém kódu. S je výsledek sčítání či odčítání v přímém kódu. A S, B S, S S jsou znaménka operandů. A M, B M, S M jsou absolutní hodnoty operandů. S M = B M - A M S S = B S Příklady Done Obr Algoritmus sčítání a odčítání v přímém kódu Jsou dána dvě 4-bitová čísla A, B ve dvojkovém doplňku. Proveďte jejich binární součet a určete hodnoty příznaků N, Z, V, C. VŠB-TU Ostrava 69

76 7. Aritmetické operace pro celá čísla 1) A = 0011; B = 0100 Výsledek: (1011) 2 = (-7) 10; N = 1; Z = 0; V = 1; C = 0; 2) A = 0101; B = 0111 Výsledek: (1100) 2 = (-4) 10; N = 1; Z = 0; V = 1; C = 0; 3) A = 0111; B = 1001 Výsledek: (0000) 2 = (0) 10; N = 0; Z = 1; V = 0; C = 1; 4) A = 0111; B = 1010 Výsledek: (0001) 2 = (1) 10; N = 0; Z = 0; V = 0; C = 1; 5) A = 0011; B = 1010 Výsledek: (1101) 2 = (-3) 10; N = 1; Z = 0; V = 0; C = 0; 6) A = 0110; B = 1010 Výsledek: (0000) 2 = (0) 10; N = 0; Z = 1; V = 0; C = 1; 7.6 Sčítání a odčítání v binárním posuvu Binární posuv offset binary je kód, který zobrazuje číslo se znaménkem, kde je stejná hodnota posuvu bias or offset, který je přičten ke všem číslům, B A = A + b. Potom posunuté číslo B A je přirozené číslo. V počítačové terminologii, posunuté číslo B A je celé číslo bez znaménka, tedy číslo kladné. Sčítání a/nebo odčítání v excess-n je matematicky definováno vzorci (0703) a (0704). Slovo matematicky znamená, že nenastane žádné přetečení. Příklad sčítání je uveden na obr Offset Binary a excess-n jsou identické termíny B Sum = (A + B) + b = B A + B B - b (0703) B A = A + b; B A 0 B Sub = (A - B) + b = B A - B B + b (0704) Kde B Sum, B Sub jsou výsledky v binárním posuvu a jsou to přirozená čísla, ( B S 0); A, B jsou operandy; B A, B B jsou operandy v posuvu; b je bias, posuv; Při výpočtech nesmí nastat přetečení. Dekad. Excessn dekadicky n binárně Excess- Operace Pozn. číslo 28 ADD bias Bias je 13, dekadicky + 14 ADD bias SUB bias Posunuté číslo je vždy bez znaménka Obr Matematické sčítání v excess-n, bias je 13 dekadicky V počítači, kde jsou čísla umístěna v n-bitovém slově, může dojít k přetečení při výpočtu dílčích výsledků nebo až u konečného výsledku. Jedná se hlavně o situace součtu B A + B B, když výsledek je vyšší než 2 n 1, nebo o situaci odčítání B A B B, když výsledek je menší než nula. Toto přetečení způsobí, že vztahy (0703) a (0704), jsou neplatné. Proto je nezbytné modifikovat původní vztahy (7003) a (0704) tak, že vezmeme v úvahu n-bitové slovo. Výsledkem jsou vztahy (0705) a (0708), které jsou platné pro všechny hodnoty posuvů, a vzniklé přetečení nemá vliv na správný výsledek. Zobrazení čísel pomocí offset binary používají čísla zobrazována v pohyblivé řádové čárce, kdy hodnota posuvu je 2 n1 1. Pak vztahy (0706), (0707) a (0709) jsou platné pro posuv 2 n-1 1 a přetečení dílčích výsledků opět nemá vliv na správný výsledek. K přetečení může dojít pouze v konečném součtu, které je možné detekovat příznakem C - carry. VŠB-TU Ostrava 70

77 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Pro sčítání B Sum = ( B A + B B) + not (b) + 1, platí pro jakýkoli bias (0705) B Sum = ( B A + B B) + b + 2, platí pouze pro bias 2 n-1-1 (0706) B Sum = ( B A + B B) + 2 n-1 + 1, platí pouze pro bias 2 n-1-1 (0707) Pro odčítání B Sub = ( B A + not( B B)) b (0708) B Sub = ( B A + not( B B)) + 2 n-1, platí pouze bias 2 n-1-1 (0709) Kde B Sum je součet v n-bitovém binárním posuvu; B Sub je rozdíl v n-bitovém binárním posuvu; B A, B B jsou operandy v n-bitovém binárním posuvu; b je bias nebo posuv; not(b) je bitwise negace bias b; n je n-bitové slovo pro zobrazení; 2 n-1-1 je bias pro pohyblivou řádovou čárku podle IEEE 754. Matematický důkaz pro B S = B A + B B + b + 2, kde b = 2 n-1-1 Důkaz je platný pro n-bitové slovo 0 = 2 n = 2*2 n = 2*(2 n-1-1) + 2 = 2b+2 B S = (A + B) + b = A + B + b + 0 = A + B + b + 2b +2 B S = (A + b) + (B + b) = B A + B B + b + 2 Na obr je sčítání v offset binary, kdy první součet má přetečení. Výsledek tohoto součtu odpovídá vzorci S = (a + b) mod 16 = 21 mod 16 = 5. Avšak tento součet korigován přičtením hodnoty "not b plus 1" a po této korekci je výsledek správný. Dekadické Excess-n Excess-n binárně Operace číslo dekadicky Pozn. 4 ADD bias ADD bias Nastalo přetečení Not(b) SUB bias Posunuté číslo je vždy bez znaménka Obr Příklad pro 4-bitové slovo kde bias je 2 n-1-1 = 7 VŠB-TU Ostrava 71

78 7. Aritmetické operace pro celá čísla Příklady Proveďte součet dvou čísel A, B v posunutí podle vztahu (0703), výsledek B Sum vyjádřete dekadicky. Hodnota posunutí je bias =7. 1) A = 4; B = 3 Výsledek: B Sum = 12 2) A = 7; B = -5 Výsledek: B Sum = 9 3) A = -5; B = 11 Výsledek: B Sum = 13 4) A = -2; B = -4 Výsledek: B Sum = 1 Proveďte rozdíl dvou čísel A, B v posunutí podle vztahu (0704), výsledek rozdílu B Sub vyjádřete dekadicky. Hodnota posunutí je bias =7. 1) A = 4; B = 3 Výsledek: B Sub = 12 2) A = 7; B = -1 Výsledek: B Sub = 15 3) A = -3; B = -3 Výsledek: B Sub = 1 4) A = -2; B = -4 Výsledek: B Sub = Sčítání a odčítání v BCD kódu Provádění aritmetických operací v desítkové číselné soustavě pro nás není žádný problém, ale počítač pracuje s binární soustavou. Proto následující text popisuje výpočty s dekadickými čísly na binární aritmetice. Základem je, že pro zobrazení se používá BCD kód, kdy do nibblu je umístěna jedna dekadická číslice. Potom v případě součtu dvou číslic v rámci nibblu mohou nastat situace, obr V prvním případě, je výsledek v nibblu je správný. Ve druhém je výsledek vyšší než 9 a musí být korigován přidáním čísla 6. Ve třetím případě, sčítání v nibblu generuje přenos do dalšího nibblu a výsledek musí být opět korigován přičtením čísla 6. Korekce výsledku, kdy se přičítá hodnota 6 v situacích: Aritmetika v BCD kódu Výsledek součtu je větší než 9; Součet nibblu generuje přenos do vyššího nibblu. 0-tý nibble Součet je větší než nibble 0-tý nibble Přenos do vyššího nibble nibble 0-tý nibble Obr Sčítání pro BCD kód pomocí binárního sčítání Výsledek sčítání je o jednu pozici větší, než je maximální řád operandů, viz vztah (0710). Toto je typická vlastnost každého sčítání. V počítači jsou celá čísla v BCD kódu reprezentována pomocí řetězce. Pokud délka tohoto řetězce nemá žádné omezení, potom nemůže dojít k přetečení. V případě konečného řetězce může dojít k přetečení, [DEC_VAX]. n r = max(n 1,n 2) + 1 (0710) VŠB-TU Ostrava 72

79 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Kde n r je maximální řád součtu; n 1, n 2 jsou řády operandů součtu. Na obr je uveden příklad sčítání v BCD kódu a možnosti provedení korekce. První korekce bude provedena, pokud je součet v nibblu vyšší než 9, nebo když je generován přenos do vyššího nibblu. Provedení první korekce pomocí přičtení hodnoty 6 může také generovat čísla vyšší než 9 a přenos do vyššího nibblu. Teď se provede pouze korekce přičtením hodnoty 6 pouze v případě, že součet je vyšší než 9. Opět, součet v nibblu může být větší než 9, proto korekce se provádějí, pokud jsou hodnoty v nibblu větší než nibble přenos 2. nibble přenos 1. nibble přenos 0. nibble Pozn. Kontrola v dekadické soustavě Přenos do dalšího nibble První binární sčítání První korekce Přenos do dalšího nibble Druhé binární sčítání Druhá korekce Přenos do dalšího nibble Konečný výsledek 1804 Odečítání je nahrazeno přičtením záporného čísla v desítkovém doplňku Obr Sčítání v BCD kódu pro více nibblů Odečítání může být provedeno přičtením záporného čísla, viz obr Záporné číslo je vyjádřeno pomocí desítkového doplňku. Pro přehlednost je vhodné použít pro znaménko nejvýznamnější číslici, kde 0 znamená kladné a 9 záporné číslo. Jinými slovy to znamená, přidat jeden nibble pro znaménko. Ve výsledku pak nejvýznamnější číslice určuje znaménko. Definice odečítání - dekadicky Operace BCD číslo Carry in Pozn První operand A = 9 A +1, druhý operand První sčítání Korekce sčítání Výsledek je negativní A = 9 A Konečný výsledek v BCD kódu se znaménkem Obr Ukázka odečítání pomocí operace sčítání VŠB-TU Ostrava 73

80 7. Aritmetické operace pro celá čísla Příklady V BDC kódu (zhuštěném bez znaménka) proveďte součet dvou čísel A + B, na 16-bitové sběrnici: 1) A = 3789; B = 3589 Výsledek: ( ) 2) A = 1444; B = 4559 Výsledek: ( ) 3) A = 251; B = (-126) Výsledek: ( ) 4) A = 348; B = 911 Výsledek: ( ) V BDC kódu (zhuštěném bez znaménka) proveďte rozdíl dvou čísel A - B, na 8-bitové sběrnici: 5) A = 7; B = 5 Výsledek: ( ) = (2) 10 6) A = 4; B = 1 Výsledek: ( ) = (3) 10 7) A = 14; B = 9 Výsledek: ( ) = (5) 10 8) A = 76; B = 25 Výsledek: ( ) = (51) Násobení Násobení celých čísel bez znaménka je základní aritmetickou operací. Algoritmus násobení je stejný jak pro binární, tak i dekadická celá čísla bez znaménka, viz obr Algoritmus je platný jak z matematického, tak i počítačového hlediska a při použití tohoto algoritmu je nutné vzít v úvahu následující: Násobení celých čísel bez znaménka Algoritmus je platný pouze pro celá čísla bez znaménka Počet bitů ve výsledku je dán součtem počtu bitů operandů, vztah (0711). n r = n 1 + n 2 (0711) Kde n 1, n 2 jsou celkové počty bitů jednotlivých operandů. n r je počet bitů výsledku. Násobení Počet bitů Dekadicky bitů 22 * bitů * bitů 110 Obr Násobení celých čísel bez znaménka V případě násobení čísel se znaménkem je tato operace prováděna podle algoritmu pro čísla bez znaménka s určitou modifikací, viz obr : Oddělíme znaménkový bit od obou operandů a určíme znaménko výsledku. Znaménko výsledku je dáno operací XOR mezi oběma znaménky, krok 1. VŠB-TU Ostrava 74

81 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Operandy jsou nyní v absolutní hodnotě a můžeme provést operaci násobení jako pro čísla bez znaménka, krok 2. Výsledek modifikujeme podle hodnoty znaménka výsledku, krok 3. Dvojkový doplněk Znaménko Absolutní hodnoty Výsledek ve dvojkovém doplňku Kontrola v dekadické soustavě plus 0101 (+5) * minus * 0111 * (-7) 0101 Krok 1 Krok xor operace minus Krok OK (-35) Obr Násobení čísel se znaménkem Násobení čísel se znaménkem ve dvojkovém doplňku je možné provést přímo pomocí speciálních algoritmů, první z nich je Boothův algoritmus [wiki_0707] a další algoritmy jsou uvedeny v [Ercegovac_2004], [Koren_2002] a [Stine_2012]. 7.9 Dělení Dělení je velmi náročná aritmetická operace, protože výsledek může být zobrazen v různých formách a samotný výkon operace je časově náročný. Výsledkem dělení v každém případě je racionální číslo Q. Tato podkapitola ovšem popisuje pouze dělení celých čísel, tzn. celočíselné dělení. Výsledek pak může mít dva tvary, buď to bude zlomek, nebo podíl se zbytkem Zlomek je velmi přesný výsledek dělení. Využívá ho mnoho programovacích jazyků jako datový typ, [Matlab_0701] a [wiki_0708]. Vztah (0712) definuje podíl s nebo beze zbytku jako výsledek dělení. Tento vzorec je jednoznačně definován pouze pro kladná čísla; tato čísla se nazývají čitatel a jmenovatel. Jedním z prvních algoritmů dělení je Euclidianovo dělení, který byl původně definován pro kladná celá čísla. Později byl tento algoritmus rozšířen i o záporná čísla. Základní myšlenkou tohoto algoritmu je to, že zbytek je vždy kladný, [wiki_0709]. Další algoritmus celočíselného dělení připouští kladný nebo záporný zbytek, vztah (0713), [Koren_2002] a [Ercegovac_2004]. Tato definice se používá v mnoha matematických systémech a programovacích jazycích. Kde n = d * q + r (0712) 0 r < d (0713) n je čitatel nebo dělenec, a je to celé číslo d je jmenovatel nebo dělitel a je to celé číslo, které není rovno nule (d 0). q je podíl, celé číslo r je zbytek Racionální čísla Q jsou 1.1, 1/8, Přirozená čísla N jsou {0, 1, 2, 3 } Euclidianovo dělení, zbytek je vždy kladný Floor, ceiling, truncation jsou matematické funkce důležité k zaokrouhlování čísel VŠB-TU Ostrava 75

82 7. Aritmetické operace pro celá čísla Na obr jsou uvedeny různé přístupy k celočíselnému dělení. Podíl je zde vždy celé číslo a zbytek může být kladný nebo záporný. Z tabulky je vidět, že nejvíce se liší výsledky u Euclidianova algoritmu a u programovacího jazyka Python. Některé systémy dokonce rozlišují mezi zbytkem (remainder) a výsledkem operace modulo. Avšak literatura uvádí, že zbytek je výpočet modulo, [ISO / IEC_0701], [wiki_0710] a [wiki_0711]. Systém Operace funkce 7 a 3 7 a -3-7 a 3-7 a -3 Euclidianův algoritmus Quotient Remainder MS Excel 2010 QUOTIENT No remainder MOD Octave v3.2.4 Idivide Remainder Modulo GNU bash, / (integer division) v % (reminder) C language / (integer division) (gcc compiler) % (as modulo, remainder) C plus / (integer division) (gcc compiler) % (as modulo, remainder) Python // (integer division) % (as remainder, modulo) Obr Výsledky celočíselného dělení v různých systémech Poslední stanovisko k celočíselnému dělení je formulováno v normě ISO/IEC : 2012, Informační technologie Část 1: Celé číslo a aritmetika v pohyblivé řádové čárce, která je známá pod zkratkou LIA. Tato norma uvádí definici podílu a zbytku. Standardy LIA uvádí celočíselné jako: quot I (-3; 2) = -2 zaokrouhlení směrem k mínus nekonečnu, stanoveno v LIA-2 q = floor (n/d) (0714) Floor division div t I (-3; 2) = -1 zaokrouhlení směrem k nule není v žádné části LIA již specifikováno q = truncation (n/d) (0715) To znamená, že je upřednostňován algoritmus quot I (0714) se zaokrouhlením směrem k mínus nekonečnu. Tato definice je známá pod názvem floor division, q = floor (n/d). Jiná definice, která je často používána pro dělení je formule (0715) a je považována za historickou. V tomto případě, výsledek je ořezán truncation. Norma ISO/IEC : 2012 uvádí, že zbytek se vypočítá pomocí funkce modulo mod I, (uvedené v LIA-2). Standard o modulo operaci uvádí: "Je spojena s dělením pomocí následujících identit: LIA-2 stanovuje, že zbytek je vypočítán pomocí operace modulo x = quot I (x; y) * y + mod I (x; y) if y 0, a nedochází k přetečení VŠB-TU Ostrava 76

83 y < mod I (x; y) 0 if y < 0 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO 0 mod I (x; y) < y if y > 0 (0717) Kde x je čitatel nebo dělenec; y je jmenovatel nebo dělitel; mod I je funkce modulo a vypočítává zbytek celočíselného dělení. Programovací jazyk Python od verze 2.2, včetně Python verze 3.x, používá algoritmus floor division, [Python_0701], [Python_0702] a definuje nový operátor // (dvojité lomítko) jako celočíselné dělení. Operátor modulo zůstává stejný % (procento) a vytváří zbytek. I původní operátor / (lomítko) dává podíl podle algoritmu floor division. Programovací jazyk C je definován normou ISO/IEC 9899: 2011-Programovací jazyky-c a tato norma stanovuje pro celočíselné dělení operátor / (lomítko). Podíl se pak vypočítává pomocí ořezaného dělení truncation division. Norma uvádí: Když jsou dělena celá čísla, výsledkem operátoru / je algebraický podíl, kde zlomková část je zrušena. Když je podíl a/b zobrazitelný, potom výraz (a/b)*b + a%b se bude rovnat a. Toto se často nazývá ořezání směrem k nule - ''truncation towards zero". Programovací jazyk C++ je definován v ISO/IEC 14882: Programovací jazyk C++ a pro celočíselné dělení operátor / uvádí podobné věty. To znamená, že C a C++ používají ořezané (truncation) celočíselné dělení. Potom hodnota zbytku vyplývá z této definici. Pokud je žádoucí použít floor division, pak funkce floor musí být použita, floor (a/b) a zbytek je nutno vypočítat zvlášť. Realizace dělení se provádí mnoha algoritmy, které jsou popsány v literatuře [Ercegovac_2004], [Internet_0701], [Koren_2002], [wiki_0712] nebo [Muller_2010]. Realizace algoritmů dělení je pouze pomocí konečných automatů (FSM) Reference [DEC_PDP11] PDP11 processor handbook, PDP11/04/34a/44/60/70, instruction set and instruction SUB; Digital Equipment Corporation, 1979; ( on line ) [DEC_VAX] VAX780 Architecture handbook; Digital Equipment Corporation, 1977; ( on line ) [Ercegovac_2004] M. D. Ercegovac, M. Lang; Digital Arithmetic; Morgan Kaufmann Publishers 2004; ISBN [Intel_0701] Intel 64 and IA-32 Architectures Software Developer s Manual; Intel 2011 VŠB-TU Ostrava 77

84 7. Aritmetické operace pro celá čísla [Internet_0701] Arithmetic Operations on Binary Numbers; on line [Internet_0702] Multiplication in FPGAs; on line [ISO/IEC_0701] ISO/IEC : Information technology - Language independent arithmetic - Part 1: Integer and floating point arithmetic [ISO/IEC_0702] ISO/IEC 9899: Programming languages C [ISO/IEC_0703] ISO/IEC 14882: Programming Language C++ [Kaps_2013] Jens-Peter Kaps; Digital System Design, Signed Magnitude Addition Subtraction Algorithm; George Mason University; [Koren_2002] I. Koren; Computer Arithmetic Algorithm; A. K. Peters Ltd. 2002; ISBN [Matlab_0701] Dom::Rational Field of rational number; on line [Muller_2010] Jean-Michel Muller, Nicolas Brisebarre, Florent de Dinechin, Claude-Pierre Jeannerod, Vincent Lef`evre, Guillaume Melquiond, Nathalie Revol, Damien Stehl e, Serge Torres: Handbook of Interchange-Point Arithmetic; Birkhauser Boston, a part of Springer Science+Business Media, LLC 2010; ISBN ; e-isbn [Python_0701] Why Python's Integer Division Floors; on line [Python_0702] PEP Changing the Division Operator; on line [Stine_2012] J. E. Stine; Digital Computer Arithmetic Datapath Design Using Verilog HDL; Springer 2012; ISBN [wiki_0701] Status register; on line [wiki_0702] Negative flag; on line [wiki_0703] Zero flag; on line [wiki_0704] Overflow flag; on line VŠB-TU Ostrava 78

85 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO [wiki_0705] Carry flag; on line [wiki_0706] Sign extension; on line [wiki_0707] [wiki_0708] [wiki_0709] Booth's multiplication algorithm; on line Rational data type; on line Euclidean division; on line [wiki_0710] Remainder; on line [wiki_0711] [wiki_0712] Modulo operation; on line Division algorithm; on line VŠB-TU Ostrava 79

86 8. Aritmetika v pevné řádové čárce 8. Aritmetika v pevné řádové čárce Termín pevná řádová čárka (FX Fixed point) se používá hlavně v informatice. Čísla v pevné řádové čárce lze chápat jako čísla s desetinnou tečkou, která je umístěna v předem definovaném místě. Z matematického hlediska jsou to racionální čísla Q, která se vyjádřují jako podíl nebo zlomek n/d. Pokud přemýšlíme o zlomku a možnostech jeho zápisu a čtení, pak reálné číslo 1.23 je možné napsat jako např. 0,00123 * 1000 (0,00123/10-3 ) 1,23 * 1, a také jako 1,23 * 1/ * 1/1000 atd. Druhý činitel (tedy číslo, kterým násobím) se nazývá měřítko (scaling factor), [wiki_0803]. Toto měřítko je buď číslo celé nebo ve tvaru zlomku 1/jmenovatel. Pak je možné číst zlomek jako: 1.23 je číslo 123 v měřítku 1/100; 123 je číslo 1,23 v měřítku 100 atd., Nebo číslo 123 v měřítku 1/100 je 1,23, a tak dále, [wiki_0803 ]. Stejné principy platí i pro záporná čísla v jakémkoli měřítku, obr Čísla v pevné řádové čárce jsou podmnožinou reálných čísel, ne naopak. Měřítko - Scaling Factor 1.23 = 12.3/10 = 123/100 = 1 230/ = -22/20 = -33/ je 123 v měřítku 1/ je 123 v měřítku 1/ v měřítku 1/100 je je -33 v měřítku 1/30-22 v měřítku 1/20 je v měřítku 1/100 je 1.23 Obr Měřítko V měřítku se nejvíce využívají mocniny 2 nebo 10 a jsou zvoleny tak, aby čitatel bylo celé číslo. Základní aritmetické operace čísel v pevné řádové čárce jsou pak založeny na počítání se zlomky, další podrobnosti budou vysvětleny později. Aplikace jiných měřítek je také možná, např. měřítko 1/3600 se používá pro převod sekund na hodiny nebo pro převádění úhlů, kde úhel 2π radiánů odpovídá číslu Pevná řádová čárka je teorie o převodu reálného čísla na zlomek Význam pevné řádové čárky spočívá v tom, že aritmetika celých čísel je použita namísto pohyblivé řádové čárky. Aritmetika celých čísel je rychlejší než aritmetika v pohyblivé řádové čárce. Navíc, ne každý procesor má hardwarovou jednotku s pohyblivou řádovou čárkou, např. digitální signálový procesor (DSP Digital Signal Processing). V této situaci, pohyblivá řádová čárka je simulována pomocí softwarové knihovny, která je pomalejší, než výpočet aritmetiky celého čísla. Druhým důvodem je přesnost, ve vhodné definici pevné řádové čárky je možno dosáhnout vyšší přesnosti, než pomocí pohyblivé řádové čárky při stejné velikosti slova. Další podrobnosti budou vysvětleny později. Význam čísel v pevné řádové čárce je: VŠB-TU Ostrava 80

87 Převod čísla s desetinnou tečkou na celé číslo. Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Při vhodné definici a stejné velikosti slova, může číslo v pevné řádové čárce být přesnější než číslo v pohyblivé řádové čárce. Příklad bude uveden později. Časový výkon aritmetických operací pro celá čísla je rychlejší než pro čísla s pohyblivou řádovou čárkou. Rozsah zobrazení čísla v pevné řádové čárce je menší, než v pohyblivé řádové čárce. Toto je ovšem negativní vlastnost. Význam Teorie binárního měřítka pro čísla v pevné řádové čárce se používá hlavně ve zpracování číslicových signálů, ale i v dalších oblastech, literatura [wiki_0804]: Digitální zpracování signálu. Většina DSP procesorů pracuje pouze s celými čísly. Operace v pohyblivé řádové čárce je možné pouze softwarově simulovat. Oblast DSP zahrnuje i aplikaci digitálního filtru, digitální zpracování obrazu, převod řeči na text a zpět, a tak dále. Binární úhel, kde 2π úhel odpovídá např = V roce 1970 a 1980 byla pevná řádová čárka použita pro výpočty v reálném čase, jako je například letový simulátor. Výpočet komprese JPEG obrázků, která je založena na diskrétní kosinové transformaci (DCT Discrete Cosine Transformation.) Počítačová grafika. Podporu pro výpočty s racionálními čísly je možné najít i v programovacích jazycích a v algebraických výpočetních systémech, jako je Mathematica a Maple, [wiki_0809]. V programovacích jazycích je podpora založena na softwarových knihovnách. Jedná se o jazyky Common Lisp, Perls, Ruby, C / C++, VHDL a další jsou uvedeny v literatuře [wiki_0809], [vhdl_0801]. U jazyků C/C++, je použita podpora GNU Multiple Precision aritmetické knihovny, [wiki_0809]. Programovací jazyk Python má modul fraction - zlomek, který poskytuje podporu pro výpočty pomocí racionálních čísel, [Python_0801]. Naproti tomu, existuje knihovna libfxmath, která je nezávislá na programovacím jazyku a používá definici Q Tato knihovna je distribuována pod MIT licencí, [Google_0801] a [wiki_0808]. 8.1 Binární měřítko Ve většině případů je preferováno binární měřítko 1/2 n. V následujícím textu bude používáno měřítko i v desítkové nebo šestnáctkové číselné soustavě. Měřítko nemůže být nulové, ale číslo v pevné řádové čárce může být nula. Obr ukazuje terminologii na 8-bitovém čísle. Pevná řádová čárka může být s nebo bez znaménka. V případě čísla se znaménkem v pevné řádové čárce je znaménko umístěno v bitu MSB. Pro záporná čísla v pevné řádové čárce se využívá dvojkový doplněk. Číslo v pevné řádové čárce může být chápáno jako celé číslo v měřítku Číslo v pevné řádové čárce může být chápáno dvěma způsoby. První způsob je, že číslo chápeme jako celé číslo se znaménkem, nebo bez znaménka, obr Tento Pevná řádová čárka má způsob také označujeme jako integer číslo. Druhý způsob chápaní čísla v pevné řádové čárce je jako reálné číslo. V tomto případě je důležitá informace o pozici radix desetinnou část znaménko, celou část a tečky, která číslo rozděluje na celočíselnou část (integer část) a zlomkovou část, obr Pozice radix tečky je určena měřítkem. Opět, číslo může být bez znaménka nebo se VŠB-TU Ostrava 81

88 8. Aritmetika v pevné řádové čárce znaménkem, kdy MSB bit je znaménkový bit. V příkladu na obr , je měřítko 1/2 3, to znamená, že zlomková část má 3 bity počítané od desetinné tečky vpravo. Váha LSB bitu je 2-3, všeobecně váha LSB bitu je 2 -f pro měřítko 1/2 f. Hodnota čísla v pevné řádové čárce na obr je IN = 53 H jako celé číslo a FX = 53 H * 1/2 3 = A.A H jako reálné číslo s radix tečkou * 1/ Nibble 1 Nibble 0 Integer část Zlomková část Velikost (počet bitů) zlomkové části je dána měřítkem. Znaménko Integer číslo - IN Měřítko - SF Znaménko Radix tečka Číslo v pevné řádové čárce FX nebo reálné číslo - Re Poloha radix tečky je dána měřítkem. Poznámka k desetinné čárce a radix tečce Obr Označení částí v pevné řádové čárce Radix tečka a desetinná čárka Dále bude používán pojem radix tečka, který považujeme za všeobecný na místo desetinná čárka. Protože: Pojem radix. Používat pojem desetinná tečka v hexadecimální soustavě není plně vhodný. Ale pojem radix se používá pro označení základu číselné soustavy. Je žádoucí hovořit všeobecně a pojem radix je všeobecný. Pojem tečka. Pojmy desetinná tečka a desetinná čárka v desítkové soustavě jsou ekvivalentní. Součástí informatiky jsou i programovací jazyky, kde se zásadně používá tečka namísto čárky a to v různých číselných soustavách. Formát Q4.3 Váhy pro čísla bez znaménka MSB LSB b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0 MSB LSB 7 0 a 4 a 3 a 2 a 1 a 0 a -1 a -2 a -3 Váhy bitů. Váhy pro čísla se znaménkem -b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0 Celočíselné číslo Integer číslo - IN Obr Váhy bitů -a 4 a 3 a 2 a 1 a 0 a -1 a -2 a -3 Číslo v pevné řádové čárce - FX Reálné číslo - Re Obr ukazuje váhy jednotlivých bitů v bytu pro případy, kdy číslo je chápáno jako celé čísla (integer) nebo jako reálné číslo. V případě celého čísla má LSB váhu 2 0 a MSB bit může VŠB-TU Ostrava 82

89 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO být znaménkový. A pokud je číslo v pevné řádové čárce, má LSB bit váhu 2-3 a MSB bit může být znaménkový. Váha 2 0 v pevné řádové čárce je určena radix tečkou. V případě zobrazení čísel se znaménkem je aplikován dvojkový doplněk a znaménkový bit má zápornou váhu. Tento princip definice vah je vhodné používat pro převod do desítkové číselné soustavy. Formát Q MSB LSB MSB LSB Znaménkové rozšíření. Znaménkové roz- Celá část čísla - IN Fixed point - FX Obr Znaménkového rozšíření v pevné řádové čárce Je žádoucí, aby definice formátu čísla v pevné řádové čárce byla vztažena k bytu či slovu. Pokud je počet bitů čísla v pevné řadové čárce menší než byte nebo slovo, potom číslo se většinou umísťuje od pravého bitu a nejvýznamnější bity je potom nutno vyplnit. V případě čísla bez znaménka je to hodnotou nula, v případě čísel se znaménkem se aplikuje znaménkové rozšíření, obr Volné bity se vyplní hodnotou znaménka. V praxi jsou definovány formáty pro zobrazení čísel v pevné řádové čárce. Pozice desetinné tečky nebo měřítka je definována uživatelem nebo knihovnou softwaru. V literatuře můžeme najít spoustu definic pevné řádové čárky: Qm.f formát nebo Qm.n formát nebo Q číselný formát, více informací viz níže. Qf formát, kde Q je prefix, který označuje racionální čísla a f je počet bitů v desetinné části. Formát Bn, znamená to, že velikost celočíselné části má n-bitů plus znaménkový bit a zlomková část má n - 1 bitů, literatura [wiki0804]. Číslo se znaménkem nebo bez m.n. fxm.b, kde fx je zkratka pro pevnou řádovou čárku, m je počet bitů v celočíselné části a b je počet bitů celého slova. Například, fx3.16 je zápis pro 3 bity celočíselné části v 16-bitovém slově, desetinná část má 13 bitů. s:m:f formát, kde každá položka znamená počet bitů, s znaménkový bit, m- počet bitů celočíselné části, f počet bitů desetinné části. Formáty. 8.2 Formát m.n Formát m.n je definice pro čísla v pevné řádové čárce, kde m je počet bitů celočíselné části a n je počet bitů zlomkové části. V případě definice čísel se znaménkem hodnota m je počet bitů celočíselné části včetně znaménka. Tuto definici lze nalézt v reálné praxi, literatura [Malapeti_082010], [Oberstar_082007] a [Yates_082013]. Velmi oblíbené jsou definice formátů bez velikosti celočíselné části, např nebo 0.32 pro čísla bez znaménka a formáty 1.15 nebo 1.31 pro verzi se znaménkem. Tyto definice bez celočíselné části mají tu výhodu, že desetinná část má maximální počet bitů. To je situace, kdy pevná řádová čárka je přesnější VŠB-TU Ostrava 83

90 8. Aritmetika v pevné řádové čárce než pohyblivá řádová čárka. Zlomková část má více bitů než mantisa v pohyblivé řádové čárce při stejné velikosti slova. 8.3 Číselný formát Q Číselný formát Q je formát pro pevnou řádovou čárku, a také písmeno Q je symbol pro racionální čísla používaný v matematické teorii. V informatice, jde ovšem o označení pro formát čísel v pevné řádové čárce ve variacích Qm.f, Qf, Qm.n nebo Qn. Tento formát bude využíván v následujícím textu. Formát Q je vždy definován se znaménkem, kde dvojkový doplněk je použit pro vyjádření záporného čísla a MSB bit je znaménkový. Písmeno n nebo f znamená počet bitů v zlomkové části, m je počet bitů v části celočíselné bez znaménka, [wiki_0805] a [TI_082003]. Pak minimální požadovaná velikost slova je součet počtu bitů celočíselné a desetinné části a znaménkového bitu, vztah (0801). Například, formát Q2.13 má znaménkový bit, 2 bity pro celočíselnou část a 13 bitů pro zlomkovou část. V další literatuře je také možné najít, že m je počet bitů celočíselné části včetně znaménka, [Oberstar_082007], [wiki_0808] a [Google_0801]. Pak m + n je požadované minimum počtu bitů ve slově. Velikost slova je m + f + 1 (0801) Formát Qm.f. Racionální čísla jsou čísla ve formě zlomku Pro záporná čísla je použit dvojkový doplněk Kde +1 je znaménkový bit. m je počet bitů celočíselné části. n nebo f je počet bitů desetinné části. 8.4 Rozsah zobrazení v pevné řádové čárce Rozsah zobrazení je dán radix tečkou, a zda definice je pro číslo s nebo bez znaménka. Rozsah může být definován dvěma formáty, první jako celé číslo s měřítkem a druhé jako reálné číslo. Vztahy (0802) a (0803) jsou určeny pro formát bez znaménka m.f a vztahy (0804) a (0805) jsou pro formát Qm.f se znaménkem. Rozsah pro pevnou řádovou čárku bez znaménka 0 až (2 m+f - 1)/2 f (0802) 0 až 2 m 1/2 f (0803) Rozsah zobrazení pro pevnou řádovou čárku bez znaménka 0 až (2 m+f -1)/2 f Rozsah pro pevnou řádovou čárku se znaménkem, m je bez znaménkového bitu Přesnost Kde od - 2 m+f /2 f do + (2 m+f - 1)/2 f (0804) od -2 m do + (2 m 1/2 f ) (0805) ε = 1/2 f (0806) Rozsah zobrazení pro pevnou řádovou čárku se znaménkem -2 m+f /2 f až (2 m+f -1)/2 f m je počet bitů celočíselné části (integer part); VŠB-TU Ostrava 84

91 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO f je počet bitů desetinné části; ε je přesnost. Poznámka k přesnosti v pohyblivé a pevné řádové čárce Převod čísla 1.4 na pevnou řádovou čárku se znaménkem ve formátu Q D*2 30 = D D = A H A H v měřítku 1/2 30 je D. Chyba zobrazení je %. 0x27B je 32-bitová hodnota a pokud představuje číslo v pohyblivé řádové čárce při definici binary32 jedná se o reálné číslo Chyba zobrazení je % Obě definice používají 32-bitové slovo a zobrazení v pevné řádové čárce má vyšší přesnost asi o dvě váhy, než pohyblivá řádová čárka. Pohyblivá řádová čárka při definici binary32 využívá pouze 23 bitů pro zlomkovou část, ale formát Q1.30 pro pevnou řádovou čárku se znaménkem využívá 30 bitů pro zlomkovou část. Každý rozsah čísla ať s nebo bez znaménka je definován dvěma rovnocennými vzorci. Mezi dvěma sousedními čísly existuje určitá mezera, která je definována počtem bitů desetinné části. Tato mezera je rovna 1/2 f vztah (0806). Tato mezera je také nazývána přesnost ε (epsilon), [Oberstar_082007]. Na rozsah zobrazení má také vliv velikost slova v počítači. V případech, kdy je definován formát Q a nejsou využívány všechny bity slova, pak slovo může navýšit rozsah zobrazení. Ale také, každá aritmetická operace mění formát výsledku, obvykle se zvyšuje počet bitů v celočíselné i zlomkové části. Pokud je požadován výsledek s menším počtem bitů či v jiném formátu potom vyšší počet bitů zlomkové části je použit pro zaokrouhlování. Zaokrouhlování používá round a sticky bity, které plní stejnou roli jako v pohyblivé řádové čárce. Omezený počet bitů pro výpočet může způsobit přetečení. Což je signalizováno příznakem C (carry) nebo příznakem V (overflow), to podle toho, zda jde o přetečení bez nebo se znaménkem. Přetečení 8.5 Převod z a do pevné řádové čárky Převod je založen na základní definici binární číselné soustavy pro čísla s a bez znaménka, dále na binárním měřítku. Pro převod z pevné řádové čárky na reálné číslo v desítkové soustavě se použijí formule (0807), (0808), (0809) a (0810). Formule (0807) a (0809) platí pro čísla bez znaménka, kde vztah (0807) vychází přímo z polynomu číselné soustavy a vztah (0809) aplikuje měřítko a polynom číselné soustavy. Formule (0808) a (0810) platí pro čísla se znaménkem, kde vztah (0808) vychází přímo z dvojkového doplňku a polynomu číselné soustavy a vztah (0810) aplikuje měřítko, dvojkový doplněk a polynom číselné soustavy. Ve vztazích jsou použity koeficienty a i a b i, které jsou násobeny váhou B i. Koeficient a i je odvozen od reálného čísla zobrazeného v pevné řádové čárce s radix tečkou. Naproti tomu koeficient b i je odvozen od celého čísla integer. Výpočet reálného čísla zobrazeného v pevné řádové Pro číslo se znaménkem, koeficient a m-1 je znaménkový bit VŠB-TU Ostrava 85

92 8. Aritmetika v pevné řádové čárce čárce potom definuje vztah (0811), který říká, že celé číslo integer se násobí měřítkem. Červená svislá čára označuje pouze pozici desetinné tečky. UN = + a m 1 B m 1 + a 0 B 0 + a 1 B 1 + a f B f (0807) SN = s B m + a m 1 B m 1 + a 0 B 0 + a 1 B 1 + a f B f (0808) UN = 1 2 f (+ b m+f 1 B m+f 1 + a 1 B 1 + b 0 B 0 ) (0809) SN = 1 2 f ( s Bm+f + b m+f 1 B m+f 1 + b 1 B 1 + b 0 B 0 ) (0810) FX = IN 1 2 f (0811) Kde UN je jakékoli číslo bez znaménka. SN je jakékoli číslo se znaménkem. B je základ číselné soustavy, B je přirozené číslo větší, než n +1. a i je koeficient z množiny {0, 1, B-1}, i je v rozmezí od m-1 do f. B i je váha, i je v rozsahu od m-1 do f. b i je koeficient z množiny {0, 1, B-1}, a i je v rozmezí od 0 do m + f 1. s je znaménkový bit s váhou B m+f. m je počet koeficientů celé části včetně znaménka. f je počet koeficientů zlomkové části. FX je číslo v pevné řádové čárce a může být chápáno jako reálné číslo. IN je celé číslo, s anebo bez znaménka. 1/2 f je měřítko. Radix tečka je mezi koeficienty a 0 a a -1 a je označena červenou svislou čárou. Pro převod je nezbytné znát: Polynom číselné soustavy. Algoritmus dvojkového doplňku. Měřítko. Pořadí aplikovaných pravidel je náhodné. Pro zobrazení záporných čísel se používá dvojkový doplněk, který je krátce definován slovy bitwise not plus 1, vztah (0812), naproti tomu je matematická definice, vztah (0813). Vztah (0812) je vhodný pro použití v binární či hexadecimální soustavě, naproti tomu vztah (0813) je vhodný pro použití v desítkové číselné soustavě. Ale nic nebrání tomu jej použít v binární či hexadecimální soustavě. 2 A = (~ A) + 1 (0812) 2 A = 2 n A (0813) Kde 2 A je dvojkový doplněk čísla A, který odpovídá číslu minus A. A je přirozené číslo. n je počet bitů použitých pro zobrazení Počet bitů čísla vyjádřeného v pevné řádové čárce je dán definicí Qm.f. Vzhledem k definici slova se celočíselná část znaménkově rozšiřuje, tak aby všechny bity slova měly definovanou hodnotu. Znaménkové rozšíření pro záporná čísla mění hodnotu slova, protože znaménkový VŠB-TU Ostrava 86

93 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO bit má hodnotu 1. Tuto změnu hodnoty rozdíl lze vidět v případě dvojkového doplňku, obr Proto v příkladech je dána přednost výpočtům s celými slovy, do kterých je umístěno číslo v pevné řádové čárce. Převod reálného čísla v desítkové soustavě na číslo v pevné řádové čárce lze použít dva přístupy a v obou je nutno znát formát čísla v pevné řadové čárce. Převod má význam pouze, když převáděné číslo je v rozsahu zobrazení, který je dán opět formátem. Avšak v počítači jsou byty a slova s definovanou délkou, proto převod budeme uskutečňovat vždy do vhodného slova či bytu o n bitech. První algoritmus je založen na výpočtu celé číslo (IN) při definovaném měřítku. Druhý způsob převodu je aplikace převodu čísla do jiné soustavy, který známe z kapitoly o číselných soustavách. V obou případech je nutno zohlednit znaménko převáděného čísla, které se v převedeném čísle projeví aplikaci dvojkového doplňku. Zde upřednostňuji převod podle prvního algoritmu s následnými kroky: Před výpočtem nutno znát symbol Re označuje převáděné číslo v desítkové soustavě. Je dán formát Qm.f, to znamená, že měřítko je 1/2 f. Je dáno n-bitové slovo, automaticky se předpokládá, že daný formát lze umístit do n-bitového slova. Pro číslo Re se vytvoří zlomek, kde v čitateli je hodnota x a ve jmenovateli hodnota 2 f. Hodnota x je součin Re a 2 f. FX = x IN 2f = IN H 2 f 2 f Hodnota x se zaokrouhlí na celé číslo IN. Pokud se jedná o zobrazení bez znaménka, potom číslo IN se převede do hexadecimální soustavy a vzniká výsledek ve tvaru zlomku. Číslo IN lze umístit do n- bitového slova a používat k aritmetickým výpočtům. Konec algoritmu. Pokud se jedná o zobrazení se znaménkem, potom pro kladné číslo se aplikuje předcházející krok. Pokud se jedná o záporné číslo, potom aplikuje dvojková doplněk na číslo IN. Pozor rovnice v tomto případě má tvar, zvýrazňuji znaménko, číslo IN je záporné. FX = x IN = 2 (IN) 2f 2 f 2 f Pro převod do dvojkového doplňku lze použít jeden ze vztahů (0810) nebo (0811). Aplikace vztahu (0810), bitwise not (A) plus 1. Číslo IN se převede do hexadecimální soustavy, definuje znaménkový bit a na binární vyjádření se aplikuje bitwise not IN plus 1 a vzniká výsledek. Tento výsledek lze umístit do n-bitového slova se znaménkovým rozšířením. Konec algoritmu. FX = x IN = IN 2 2 H (bitwise not(in)+1) = = IN H 2f 2 f 2 f 2 f 2 f Aplikace vztahu (0811), 2 A = 2 n A. Definuje znaménkový bit a počet bitů n ve kterých bude výsledek zobrazen. Převod do pevné řádové čárky VŠB-TU Ostrava 87

94 8. Aritmetika v pevné řádové čárce Absolutní hodnota čísla IN se dosadí do vztahu a vypočte se hodnota dvojkového doplňku v desítkové soustavě. Výsledek výpočtu se převede do hexadecimální číselné soustavy. Vzniká výsledek o počtu n bitů včetně znaménkového rozšíření. Konec algoritmu. FX = x IN 2f 2 2 f = (2n IN) D 2 = IN H 2 f 2 f Jak je vidět na obrázku 08-05, převod není přesný, tento rozdíl je způsoben omezeným počtem bitů v zlomkové části a zaokrouhlováním. Pouze násobky LSB váhy jsou zastoupeny přesně. Obr také uvádí zpětný převod, kontrola je provedena na základě vzorce (0807) a (0808). Aplikuje se polynom číselné soustavy, kde koeficienty odpovídají formátu reálného čísla s radix tečkou. Převod kladného reálného čísla 1.23 do formátu Q2.11 v 16-bitovém slově 1.23 * 2 11 = D = 09D7 H, IN = 09D7 H FX = B = 1.3AE H Umístění ve slově je 0x09D7 Hodnota ve slově je IN = 09D7 H Fx = 1.3AE H Převod záporného reálného čísla do formátu Q2.10 v 16-bitovém slově * 2 10 = (2417) = ( ) D = D = F68F H, Ve dvojkovém doplňku 2 IN = F68F H, 2 Re = B = 3D.A3C H Umístění ve slově je 0xF79D, dvojkový doplněk 2 IN = F68F H F68F H * 1/2 10 (scaled by) = B = 2 3D.A3C H Fx = 3D.A3C H, ve tvaru dvojkového doplňku. Kontrola 1.3AE H = = 1* *16-1 +A*16-2 +E*16-3 = D Reálné číslo je Kontrola 3D.A3C H = -1* *2 4 + D* A* * C*16-3 = Reálné číslo je Obr Převod do pevné řádové čárky Další způsob převodu je možné provést pomocí převodu čísla do binární či hexadecimální soustavy, a to odděleně pro celou a desetinnou část. Počet bitů v zlomkové části je f, jak je uvedeno v definici Qm.f, a proto výpočet zlomkové části musí být proveden na f+2 bitů a v případě nutnosti je výsledek zaokrouhlen. Tento algoritmus je uveden v kontrole na obr Převod z pevné řádové čárky do reálného čísla v dekadické soustavě je dán výše zmíněnými vzorci (0807) až (0813) a známým formátem Qm.f. Pořadí aplikace vzorců může být náhodné, ale potom je nutno zvládat výpočty v binární nebo hexadecimální soustavě stejným způsobem jako v desítkové číselné soustavě. V následujícím textu jsou popsány dva základní algoritmy. Převod z pevné řádové čárky. VŠB-TU Ostrava 88

95 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO První možnost vypočítává dekadické celé číslo se znaménkem a poté je aplikováno měřítko 1/2 f, viz obr Algoritmus je: 16-bitové číslo 0x062B ve formátu Q3.8 0x062B je kladné číslo, MSB = 0 Ve slově IN = +062B H, Fx = +06.2B H 062B H = D D v měřítku 1/2 8 = D Reálné číslo je Kontrola 6 D = 110 B D * 16 = D = 0.2B H 6.2B H * 2 8 = 62B H Po znaménkovém rozšíření do slova 0x062B v měřítku 1/2 8 je 6, D Slovo obsahuje: 0x062B 16-bitové číslo 0xDCBA ve formátu Q4.11 0xDCBA je záporné číslo, MSB = 1 Kontrola Ve slově, IN = DCBA H, FX = 1B.974 H DCBA H = D 2 DCBA H = - ((2 16 ) D D) = D D v měřítku 1/2 11 je D Reálné číslo je D = 100 B D * 2 = D =0.68C H D = C H C H * 2 11 = B * 2 11 = H Dvojkový doplněk znaménkového rozšíření (~2346 H) + 1= 2 DCBA H = 0xDCBA Slovo obsahuje 0xDCBA Obr Převod z pevné řádové čárky Před výpočtem nutno znát Zda se jedná o číslo s nebo bez znaménka Formát čísla v pevné řádové čárce Qm.f. Počet bitů slova n. Pokud se jedná o číslo bez znaménka, potom se číslo IN převede z hexadecimální soustavy do dekadické číselné soustavy. Re = IN H = IN 2 f D 1 2 f Potom se aplikuje vztah (0811), číslo IN se vynásobí měřítkem 1/2f. Konec algoritmu. Pokud se jedná o kladné číslo se znaménkem, potom se aplikuje převod jako u čísla bez znaménka. Pokud se jedná o záporné číslo je nutno do výpočtu zakomponovat převod dvojkového doplňku, což lze udělat dvěma způsoby První verze je aplikace vztahu (0812), 2 A = bitwise not (A) plus 1. Pro zdůraznění bude zde použito znaménko minus. Vztah se aplikuje na obsah slova IN H. IN H = (bitwise not (IN H ) plus 1) H Re = IN H 2 f = IN D 1 2 f VŠB-TU Ostrava 89

96 8. Aritmetika v pevné řádové čárce Na vypočtené číslo se aplikuje vztah (0809), číslo se vynásobí měřítkem 1/2 f. Konec algoritmu. Druhá verze je aplikace vztahu (0813), 2 A = (2 n - A) v desítkové soustavě. Pro zvýraznění bude použito znaménko mínus. Nejdříve se uskuteční převod z hexadecimální formy do dekadické číselné soustavy. Slovo použité k zobrazení formátu má n bitů. IN D = (2 n (IN H )) D Re = IN D 1 2 f Na vypočtené číslo se aplikuje vztah (0811), číslo se vynásobí měřítkem 1/2 f. Konec algoritmu. Druhý způsob převodu čísla v pevné řádové čárce využívající polynom číselné soustavy je dán vztahy (0807) a (0808). Ukázkové použití těchto vztahů je na obr v části kontrola. Převod 16 bitového čísla 0x2ED8 ve formátu Q7.7 na reálné dekadické číslo Znaménkové rozšíření je použito SN D = (1/2 7 ) * ( -0* * * * * * *16 0 ) SN D = (1/2 7 ) * ( ) SN D = (1/2 7 ) * (11992)=93,6875 Reálné číslo je D Kontrola Převod 16 bitového čísla 0xE9AB ve formátu Q5.9 na reálné dekadické číslo Znaménkové rozšíření je použito SN D = (1/2 9 ) * ( -1* * * * * * *16 0 ) SN D = (1/2 9 ) * ( ) SN D = (1/2 9 ) * ( -5717) = Reálné číslo je D Kontrola 93 D = 5D H D * 16 = D =0.B H D = 5D.B H D * 2 9 = D = H 2 (1655) H = (bitwise not (1655) + 1) = 2 (1655) H = E9AB H Integer číslo ve slově je 0xE9AB Fx = 5D.B H = B Integer ve slově je 0x2ED8 Obr Převod čísla z pevné řádové čírky na reálné dekadické číslo Třetí způsob převodu čísla v pevné řádové čárce do reálného čísla je aplikace polynomu číselné soustavy a měřítka, formule (0809) a (0811). Tento princip převodu je na obr Odpovídající algoritmus je: Před výpočtem nutno znát Zda se jedná o číslo s nebo bez znaménka Formát čísla v pevné řádové čárce Qm.f. Počet bitů slova n. Pokud se jedná o číslo bez znaménka, aplikuje se vztah (0809) na n bitové slovo UN = 1 2 f (+ b n B n + a 1 B 1 + b 0 B 0 ) VŠB-TU Ostrava 90

97 Příklady Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Do vztahu se dosazují koeficienty b i, které odpovídají celému číslu IN. Zlomek 1/2 f je měřítko. Konec algoritmu. Pokud se jedná o číslo se znaménkem, potom se aplikuje vztah (0810) na n bitové slovo. Samozřejmostí je, že na originální formát Qm.f je aplikováno znaménkové rozšíření a tím pádem MSB bit je znaménko. SN = 1 2 f ( b n B n + b n 1 B n 1 + a 1 B 1 + b 0 B 0 ) Do vztahu se dosazují koeficienty b i, které odpovídají celému číslu IN. Koeficient b n je MSB bit a samozřejmě odpovídá znaménku. Zlomek 1/2 f je měřítko. Konec algoritmu. 1) Číslo A vyjádřete v měřítku 1/2 3 : a) A = 256 Výsledek: 32 b) A = 400 Výsledek: 50 c) A = 72 Výsledek: 9 2) Číslo A vyjádřete v měřítku 1/2 5 : a) A = 256 Výsledek: 8 b) A = 640 Výsledek: 20 c) A = 160 Výsledek: 5 3) Číslo A vyjádřete v měřítku 1/10 3 : a) A = 256 Výsledek: b) A = 640 Výsledek: c) A = 1689 Výsledek: ) Dané číslo A převeďte na reálné desítkové číslo ve formátu Q4.2 a) A = 0x2A Výsledek: 10.5 b) A = 0x3B Výsledek: c) A = 0x19 Výsledek: 6.25 d) A = 0x0E Výsledek: 3.5 5) Dané číslo A převeďte na reálné desítkové číslo ve formátu Q3.3 a) A = 0x2A Výsledek: 7.25 b) A = 0x3B Výsledek: c) A = 0x19 Výsledek: d) A = 0x0E Výsledek: Aritmetické operace Význam pevné řádové čárky spočívá v použití celočíselné aritmetiky pro binární čísla. Teorie pevné řádové čárky mění reálné číslo na celé číslo v měřítku. Proto jsou aritmetické operace definovány ve tvaru zlomku. Vzorce (0814), (0815) a (0816) definují základní princip aritmetických operací. Čitatel představuje celé číslo integer, které je vynásobeno měřítkem. Výhodné je provádět aritmetické se stejným měřítkem, ale definice operací nebrání aplikovat čísla s různými měřítky. Každé číslo v pevné řádové čárce je definováno formátem Qm.f, přičemž výpočet základních aritmetických operací může změnit formát výsledku. Proto je nutné definovat další operaci, která změní měřítko výsledku a posune radix tečku do požadované Aritmetické operace se stejným měřítkem. VŠB-TU Ostrava 91

98 8. Aritmetika v pevné řádové čárce polohy. To je provedeno násobení a dělení mocninami 2. Tuto operace budeme nazývat korekce. Je také třeba si uvědomit, že tyto operace jsou prováděny na definované velikosti aritmetické jednotky, tj. 16, 32 nebo 64 bitů. Čísla v pevné řádové čárce jsou definována pomocí formátu a mohou být umístěna do všech velikostí slov. Kde a + b a+b 2 f 2f = 2 a b a b 2f1 2f2 = 2 a 2 f1 b 2 f2 = a b 2 f2 f (0814) f1+f2 (0815) 2f1 (0816) a, b jsou celá čísla; 2 f je měřítko. MSB Před Q3.3 Poté Q3.4 LSB MSB 6/2 3 * 2/2 = 12/2 4 LSB MSB LSB MSB LSB /2 3 * 2/2 = -12/2 4 Obr Úprava čísla pomocí násobení (aritmetický posuv vlevo) Úprava výsledku aritmetické operace čísla neboli korekce výsledku znamená změnit měřítko a tím i pozici radix tečky. Korekce se provádí násobením nebo dělením ě a jejich mocninami. Násobení 2 může být vykonáno aritmetickým posunem doleva, obr , vztah (0817). Tento posun změní polohu desetinné tečky a může změnit i znaménko. Potom se jedná o přetečení. Korekce. A * 2 i = A << i (0817) A//2 i = A >> i (0818) Kde A je celé číslo se znaménkem; i je exponent daného řádu. Dělení 2 se provádí aritmetickým posuvem vpravo, obr , vztah (0818). Podíl odpovídá floor division, kde zaokrouhlení je směrem k mínus nekonečnu, [ISO / IEC_0801]. Tento posun změní pozici radix tečky a znaménkový bit zůstává beze změn. VŠB-TU Ostrava 92

99 MSB Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Před Q3.3 Po Q3.2 LSB MSB (6/2 3 ) / (2/2) = 3/2 2 LSB MSB LSB MSB LSB (-6/2 3 ) / (2/2) = -3/2 2 Obr Úprava čísla pomocí dělení (aritmetický posuv vpravo) Poznámka k násobení a dělení číslem 2 a jeho mocninou. Aritmetický posuv vlevo znamená násobení 2. Aritmetický posun vpravo znamená dělení 2. Dělení pro dvojkový doplněk znamená floor division (zaokrouhlení k mínus nekonečnu), podle normy ISO/IEC :2012 Language Independent Architecture. Příklad v Python: -7//2 = -4, -8//2 = Sčítání a odčítání Operace součtu a odčítání se provádějí pomocí celých čísel, které odpovídají číslu v pevné řádové čárce, vztah (0814). Pokud se jedná o čísla se znaménkem potom se použit dvojkový doplněk. A také odečítání se provádí pomocí dvojkového doplňku. I v případě, že operandy mají stejné formáty, i tak výsledek je v novém formátu. Každý součet či rozdíl může zvýšit počet bitů celočíselné části o jeden. Vztah (0819) definuje nový formát výsledku všeobecně, kdy operandy mají různý formát. Potom celočíselná část výsledku bude mít o jeden bit více než je maximální počet bitů celočíselné části z obou operandů. Tuto vlastnost operace nutno zohlednit při umístění operandů do slova, nad kterými se budou provádět výpočty. Kde Qm1.f ± Qm2.f = Q(max(m1, m2) + 1).f (0819) m1, m2 jsou počty bitů celočíselné části operandů; max(m1, m2) je funkce, která vybere maximální hodnotu z m1 a m2; f je počet bitů zlomkové části operandů. Příklad, kdy sčítání mění formát výsledku je uvedeno na obr Jedná se o situaci (0.1 b b = 1.0 b), kde je jeden bit generován v celočíselné části a zvyšuje tak její velikost. Délka zlomkové části zůstává beze změny. Příklad sčítání záporného a kladného čísla je na obr Záporné číslo je zobrazeno pomocí dvojkového doplňku. a/2 f + b/2 f = (a+b)/2 f VŠB-TU Ostrava 93

100 8. Aritmetika v pevné řádové čárce MSB Binární zobrazení v byte LSB Celočíselná aritmetika Zlomek Dekadické reálné číslo Q D 0x18/ Q D 0x14/ Q D 0x2C/ Kontrola: 0xc2/2 5 = 44 D/2 5 = D Obr Příklad, kdy bit je generován v celočíselné části Binární zobrazení v byte Celočíselná aritmetika Zlomek Dekadické racionální číslo Q0.3 MSB LSB D 0xFB/ Q D 0x04/ Q D 0xFF/ Kontrola: 0xFF/2 3 = 2 FF H/2 3 = -1 D/2 3 = Obr Příklad sčítání záporného a kladného čísla 8.8 Násobení Násobení v pevné řádové čárce je definováno pomocí násobení zlomků (0815), přičemž stejné měřítko není tak důležité. Operandy mohou mít různé formáty Qm.f, a formát výsledku je vypočítán podle vztahu (0820) pro čísla bez znaménka a podle vztahu (0821) pro formát čísel se znaménkem, viz literatura [Yates_082013] a [Oberstar_082007]. Výsledek může být změněn na požadovaný formát nejprve zaokrouhlením s následnou úpravou. Kde Qm1.f1 * Qm2.f2 = Q(m1 + m2).(f1 + f2) (0820) Qm1.f1 * Qm2.f2 = Q(m1 + m2 + 1).(f1 + f2) (0821) a/2 f1 * b/2 f2 = (a * b)/2 f1 + f2 VŠB-TU Ostrava 94

101 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO m1 a m2 je počet bitů celé části, pro každý operand; f1 a f2 je počet bitů zlomkové části, pro každý operand. Základní algoritmus pro násobení celých čísel je definován pouze pro kladné operandy. V případě, že operand je záporný, je nutné změnit operand na kladný a pak vynásobit. Znaménko výsledku se počítá zvlášť; pokud je výsledek záporný, pak se vypočítá ve dvojkovém doplňku. Existují speciální algoritmy pro násobení operandů ve dvojkovém doplňku, literatura [wiki_0806] a [wiki_0807]. Binární zobrazení v byte Zlomek Q2.5 MSB LSB B H/2 5 Q2.5 Znaménkové rozšíření * * 4E H/2 5 Q D1A H/2 10 Jako zlomky (43/2 5 ) D * (78/2 5 ) D = (3354/2 10 ) D = D Kontrola (2B/2 5 ) H * (4E/2 5 ) H = (0D1A/2 A ) H = (3354/2 10 ) D = D Obr Příklad násobení Příklad násobení je uveden na obr , kde výsledek je v novém formátu. Pokud se očekává stejný formát, je nutné výsledek zaokrouhlit, viz obr Zaokrouhlování se provádí podle principu zaokrouhlení na nejbližší sudou, [IEEE ] a [wiki_0810]. Q Q R bit = 1 S bit = 1 Proto plus 1/2ulp Obr Úprava do nového formátu se zaokrouhlením 8.9 Dělení Dělení je dáno vztahem (0816), a podíl je v novém měřítku. Výpočet nového formátu podílu je složitý a další informace lze nalézt v literatuře [Yates_082013]. V situaci, kdy čitatel a jmenovatel mají stejné měřítko, je podíl bez měřítka. Pokud očekáváme výsledek ve stejném měřítku, potom vztah (0816) je upraven na tvar (0822). (A/2 f ) (B/2 f ) = (A/B) *(2 f /2 f ) = (A * 2 f )/B * 1/2 f (0822) VŠB-TU Ostrava 95

102 8. Aritmetika v pevné řádové čárce Kde A, B jsou operandy dělení; 1/2 f je měřítko. Obr ukazuje příklad celočíselného dělení kladných operandů. Používá stejné měřítko pro operandy i výsledek. V případě jednoho záporného operandu, podíl závisí na použitém algoritmu. Podrobný popis algoritmů pro dělení je uveden v literatuře [Ercegovac_2004], [Koren_2002] a [wiki_0811]. 1. krok, původní definice MSB LSB MSB LSB krok, čitatel je násoben 2 5 MSB LSB MSB LSB MSB LSB krok, podíl MSB LSB MSB LSB Výpočet (7A/2 5 ) H (3/2 5 ) H = (((7A *2 5 )/3) * (1/2 5 )) H = (F40/3) H * (1/2 5 ) = 515 H * 1/ H * 1/2 5 = 1301 D * 1/2 5 = Kontrola: (0x7A/2 5 ) / (0x03/2 5 ) = (122 D/2 5 ) / (3 D/2 5 ) = / = Obr Příklad dělení v pevné řádové čárce ve stejném měřítku 8.10 Reference [Ercegovac_2004] M. D. Ercegovac, M. Lang; Digital Arithmetic; Morgan Kaufmann Publishers 2004; ISBN [Google_0801] libfixmath, wiki; on line [IEEE ] IEEE Std , IEEE Standard for Interchange-Point Arithmetic, 29 August 2008, revision of IEEE [ISO/IEC_0801] ISO/IEC : Information technology - Language independent arithmetic - Part 1: Integer and floating point arithmetic [Koren_2002] I. Koren; Computer Arithmetic Algorithm; A. K. Peters Ltd. 2002; ISBN VŠB-TU Ostrava 96

103 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO [Malapeti_082010] H. Malapeti: Digital media processing, Appendix B: Mathematical computations on fixed-point processors; Elsevier 2010; ISBN [Oberstar_082007] E. L. Oberstar: Fixed-point Representation & Fractional Math, Revision 1.2; published by Oberstar Consulting 2007; [Python_0801] 9.5. fractions Rational numbers; on line [TI_082003] [vhdl_0801] [wiki_0801] [wiki_0802] [wiki_0803] TMS320C64x DSP Library Programmer s Reference; Texas Instrument, October 2003, SPRU565B D. Bishop: Fixed point package user s guide; on line Division (mathematics); (mathematics); on line Fraction (mathematics); (mathematics); on line Fixed-point arithmetic; arithmetic; on line [wiki_0804] Binary scaling; on line [wiki_0805] [wiki_0806] [wiki_0807] Q (number format); on line Binary multiplier; on line Booth's multiplication algorithm; on line [wiki_0808] libfixmath; on line [wiki_0809] Rational data type; on line [wiki_0810] Rounding; on line [wiki_0811] Division algorithm; on line [Yates_082013] R. Yates: Fixed-Point Arithmetic: An Introduction; Digital Signal Labs - signal processing systems 2013; on line VŠB-TU Ostrava 97

104 9. Čísla v pohyblivé řádové čárce 9. Čísla v pohyblivé řádové čárce Termín pohyblivá řádová čárka (Floating point FP) se používá hlavně v souvislosti s výpočtem pro psaní a zobrazování reálných čísel, [wiki_0901]. Možnosti zápisu čísla v pohyblivé řádové čárce je znázorněno na obr Reálné číslo se skládá z významných číslic tzv. significandu se znaménkem a ze základu (base) umocněného na řád n. Základem měřítka je číslo, které definuje základ číselné soustavy, např. 10 nebo 2. Významné číslice mohou být ve tvaru celého čísla se znaménkem nebo ve tvaru čísla s desetinnou tečkou (radix point) a se znaménkem. V této souvislosti termín radix point je vhodnější, protože není závislý na základu číselné soustavy, jako například desetinná čárka nebo binární tečka. Obecně platí, že formát s pohyblivou řádovou čárkou je dán vztahem (0901). Významné číslice x b exp Kde Významné číslice x base exp (0901) významné číslice se znaménkem jsou číslice v rozsahu 0 až b-1; base je základ číselné soustavy; exp je exponent, což je celé číslo; base exp je měřítko (SF). Číslice jsou definovány základem číselné soustavy. Dekadická číselná soustava x 10 0 = 12.3 x 10 1 = 1.23 x 10 2 = x x 10-3 = 12.3 x 10-2 = 1.23 x 10-1 = x 10 0 Binární číselná soustava x 2 0 = x 2 1 = x 2 2 = x x 2-3 = 1.1 x 2-2 = 0.11 x 2-1 = x 2 0 V binární číselné soustavě, je užitečné a obvyklé vyjadřovat exponent jako dekadické číslo. Teoretický zápis Významné číslice x base exp Obr Možnosti zápisu čísla v pohyblivé řádové čárce VŠB-TU Ostrava 98

105 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Poznámka k psaní čísel v pohyblivé řádové čárce a k radix tečce. Významné číslice a základ jsou vyjádřeny v definované číselné soustavě, ale exponent je vždy v desítkové číselné soustavě. Desítkový exponent je vhodnější pro posun desetinné tečky. Termín desetinné či binární tečky se pojí s konkrétní číselnou soustavou, ale radix point je obecný termín pro všechny číselné soustavy. Důvodem pro definování pohyblivé řádové čárky je možnost vyjadřovat čísla ve velkém rozsahu. Například vzdálenost mezi galaxiemi v prostoru je uvedena ve světelných letech, avšak délka světelné vlny je malé číslo udávané v nanometrech. Přitom obě hodnoty mohou být použity v jednom výpočtu a to s maximální přesností. Ve vzorci (0901), je řetezec významných číslic nazývány significand starší termín je mantisa. Significand je nejnovější termín, kdežto mantisa je historický pojem. Jedním z problémů u čísel s pohyblivou řádovou čárkou je způsob, jak zapsat tato čísla ve všech situacích. Věda o počítačích používá formát, který je odlišný od typografického nebo matematického zápisu, který je uváděn v literatuře. Následující termíny jsou spojeny se zápisem čísla v pohyblivé řádové čárce. Jsou to vědecký zápis, normalizovaný tvar čísla a technický zápis. Significand je nejnovější termín, který je dán standardem IEEE Vědecký zápis, tento formát obsahuje znaménko, významné číslice, základ a exponent, [wiki_0902]. Significand je jakékoliv reálné číslo. Příklady vědeckého zápisu: 2.0 x 10 2, 0.2 x 10 3, 123 x 10 45, 12.3 x 10-67, x 10 3, 1.23 x 10 2, x 2 4, x 2 5. Technický zápis je varianta vědeckého zápisu se základem 10, kde exponent je násobkem 3, [wiki_0903]. To odpovídá pravidlům prefixů v SI soustavě, které jsou v technickém prostředí upřednostňovány. SI je francouzská zkratka pro Mezinárodní systém jednotek (The International System of Units), [wiki_0913]. Možné zápisy jsou: 11,3 x 10-3 metrů je 11,3 mm; 34.5 x 10 3 m je 34,5 km; 10 Gb/s je 10 x 10 9 b/s (bit za sekundu); 1,5 TiB je 1,5 x 2 12 B. Normalizovaný vědecký zápis. Jedná se o speciální formát, kde celá část čísla má pouze jednu číslici, která není rovna nule [wiki_0904]. To znamená, že celá část čísla má pouze váhu b 0. Například, 7,8 x 10 2 ; 1,101 x 2 7. Vědecký zápis 87.6 x 10 3, x 2 7 Technický zápis 87.6 x 10 3, 3.01 x Normalizovaný vědecký zápis 8.76 x 10 4, x 2 8 Obr Příklady E zápisu E zápis je zobrazen na obr Jde o zápis čísla s pohyblivou řádovou čárkou do jednoho řádku. Tzn. že všechny části čísla jsou zapsány do jednoho řádku, kromě základu. E zápis používá pro vyjádření a oddělení exponentu buď písmeno e nebo E E zápis 8.76E4, 1.001E8 VŠB-TU Ostrava 99

106 9. Čísla v pohyblivé řádové čárce (malé e nebo velké E), například, 12.3e-3, 12.3E-3, 11.1e2... Tento formát je používán mnoha kalkulátory, tabulkami a dalšími programy. Také je využíván v programovacích jazycích jako je Ada, C ++, MATLAB, Scilab, Perl, Java a Python, [wiki_0902]. Poznámka k úpravě exponentu a posuvu radix tečky 4.56 x 10 3 = 45.6 x x 10 1 = x 10 2 Pokud se číslo posouvá doleva (radix tečka doprava), exponent se sníží o jedničku za každou posunutou pozici. Pokud se číslo posouvá doprava (radix tečka doleva), exponent se o jedničku zvýší za každou posunutou pozici. Všechny tyto zápisy jsou používány v reálné praxi a jsou automaticky chápány jako čísla s pohyblivou řádovou čárkou v desítkové číselné soustavě. Zápis v jiných číselných soustavách než desítková je řešen speciálním zápisem, který se liší případ od případu. V historii výpočetní techniky existuje mnoho různých definic jak vyjadřovat čísla v pohyblivé řádové čárce v bytech, ve slovech. Průkopníky v této oblasti byli Leonardo Torres y Quevedo a Konrad Zuse. V roce 1914, navrhl Torres y Quevedo elektromechanickou verzi analytického stroje Charlese Babbagea, který obsahoval aritmetiku už v pohyblivé řádové čárce. V roce 1938 Konrad Zuse v Berlíně dokončil svůj stroj Z1, což byl první mechanický binární programovatelný počítač, avšak byl nespolehlivý. Pracoval s 24-bitovými binárními čísly v pohyblivé řádové čárce, a měl 7-bitový exponent, 16-bitový significand (včetně jednoho implicitního bitu) a znaménkový bit. Více informací naleznete v literatuře [wiki_0901], [Randeli_1982] a [Rojas_1997]. Historie. V dalším období byly vyvinuty nové počítačové architektury a každá z nich měla svůj vlastní formát a vlastnosti pohyblivé řádové čárky. To vedlo k tomu, že tyto různé definice byly vzájemně nekomaptibilní a při výměně dat mezi uživateli s různými počítačovými architekturami byly tyto různé definice příčinou poroblémů. Všechny tyto historické zkušenosti vedly k vytvoření standardu IEEE pro pohyblivou řádovou čárku (IEEE 754). První verze této normy byla publikována v roce 1985 a vztahovala se pouze na binární aritmetiku v pohyblivé řádové čárce. Následně v roce 1987 byl zveřejněn standard IEEE pro aritmetiku v pohyblivé řádové čárce nezávislé na základu číselné soustavy, [wiki_0906]. Druhá verze IEEE 754 byla vydána v roce 2008 a obsahuje původní verzi IEEE a IEEE Standard IEEE je také mezinárodní normou ISO/IEC/IEEE 60559: IEEE 754 ISO/IEC/IEEE 60559:2011 Následující text bude vycházet ze standardu IEEE , který pojednává o číslech v pohyblivé řádové čárce se základy číselných soustav 2 a 10. Literatura [wiki_0906] vysvětluje standard IEEE-754 takto: VŠB-TU Ostrava 100

107 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Standard definuje: aritmetické formáty (arithmetic formats): množiny binárních dat a decimálních dat v pohyblivé řádové čárce, a tyto množiny se obsahují konečná čísla (včetně nul a subnormálních čísel), nekonečna a speciální nečíselné hodnoty (NaNs); vyměnitelné formáty (interchange formats): kódování (bitové řetězce), které smí být použito pro výměnu dat v pohyblivé řádové čárce v účinné a kompaktní formě; pravidla zaokrouhlování: vlastnosti zaokrouhlování čísel, které by měly být splněny během provádění aritmetických operací a konverzí operace: aritmetické operace a další operace nad aritmetickými formáty zpracování výjimek: indikace výjimečných situací (jako je dělení nulou, přetečení, atd.) Standard také obsahuje rozsáhlá doporučení pro rozšířené zpracování výjimek, pro další operace (jako jsou trigonometrické funkce), vyhodnocení výrazu a pro dosažení reprodukovatelných výsledků. Aritmetický formát lze chápat jako hodnotu operandů v pohyblivé řádové čárce a hodnotu výsledku operace. Aritmetický formát se používá pro výpočty v pohyblivé řádové čárce. Vyměnitelný formát (Interchange format) je definován poli ve slově a kódovacími schématy, za účelem umístění čísla do slova. Tento formát je potom vhodný pro výměnu dat mezi různými počítačovými architekturami. Poznámka k significandu, koeficientu a mantise Mantisa byl první historický termín pro určení číslic significandu v pohyblivé řádové čárce. Konrad Zuse používal termín mantisa v období v počítači Z-3, [Zuse_2008], a následně Burks v roce 1946 [Burks_1946] a [RFC 0382] v roce Následně, termín significand nebo zlomek byl použit ve standardu IEEE , ale ve standardu IEEE se už používán jen termín significand, který je označován buď malými písmenem c, nebo m. Obě malá písmena představují čísla v určitém formátu. V jiných zdrojích se malé písmeno c označuje jako koeficient. Termín mantisa byl zamítnut výborem IEEE pro čísla v pohyblivé řádové čárce, protože je v rozporu s již existujícím termínem mantisy, který se používá pro označení zlomkové části logaritmu, [wiki_0905]. 9.1 Significand Significand je nejnovější a oficiální termín pro označení významných číslic v pohyblivé řádové čárce, a tento pojem je definován standardem IEEE Významné číslice x b exp Significand si lze představit jako celé číslo nebo jako zlomek. Číslice significandu jsou v rozsahu 0 až b-1, kde b (base) je základ číselné soustavy. Ve výše uvedené standartu je definován i pojem koeficient, ale termín mantisa se zde již nevyskytuje. Pojem mantisa byl oficiálně používána v minulosti a také byl hodně využíván v počítačovém odvětví a dodnes jej lze nalézt v mnohé v literatuře. Více informací je v literatuře [wiki_0905]. Pro obhjesnění VŠB-TU Ostrava 101

108 9. Čísla v pohyblivé řádové čárce možnosti zápisu significandu si uvedeme příklady zápisu číslo v desítkové číselné soustavě, které může být může být zapsáno několika způsoby: * 10 +1, significand je ve formě s desetinnou tečkou. To je normalizovaná forma zápisu * 10 +2, significand je ve formě s desetinnou tečkou. Tento zápis umožňuje LIA - jazykově nezávislá aritmetika, [ISO/IEC_0901], a několik standardů pro programovací jazyky, [wiki_0905] * 10-2, significand je celé číslo. (1234/10 4 ) * 10 +2, significand je zlomek. Tento zápis je inspirován pevnou řádovou čárkou. 9.2 Přesnost Přesnost je maximální počet číslic significandu, což je základní parametr interchange formátu v pohyblivé řádové čárce. Přesnost je označena podle IEEE 754 malým písmenem p. Obr ukazuje definici přesnosti v různých zápisech significandu. V konkrétních hodnotách significandu je přesnost p rovna 7. v případě všeobecného zápisu se používá indexace bitů od nuly, to je MSB bit či číslice je nejvíce významový bit či číslice, MSB. Přesnost p udává maximální počet číslic v significandu. Dekadicky: x 10 4 = x 10 4 Binárně: x 2 4 = x 2 4 Obecný zápis: d 0. d 1 d 2 d (p 1) x b exp = d 0d 1 d 2 d p 1 b p 1 x b exp Obr Přesnost 9.3 Hodnoty v pohyblivé řádové čárce Všechny hodnoty v pohyblivé řádové čárce jsou definovány touto trojicí (znaménko, exponent, significand) při základu b. Možné zobrazitelné hodnoty jsou: konečné hodnoty (např. 3,14 nebo 0,005), nekonečno a nečíselná hodnota NaN Not a Number. Konečné hodnoty definované touto trojící jsou vyjádřeny formuli (0902). Číslo nula také patří do konečných hodnot a data v pohyblivé řádové čárce mají buď kladnou, nebo zápornou nulu. Znaménko je vyjádřeno mocninou (-1) znaménko a může mít hodnotu 0 nebo 1. Kladné znaménko má hodnotu 0 a potom mocnina je (-1) 0 = 1. Záporné znaménko má hodnotu 1 a potom mocnina je (-1) 1 = -1. Kde v = (-1) sign x significand x b exp (0902) Konečné hodnoty. v je konečná hodnota čísla v pohyblivé řádové čárce; VŠB-TU Ostrava 102

109 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO sign je znaménko a může mít hodnotu 0 nebo 1; significand je číslo v číselné soustavě o základu b; b je základ číselné soustavy (radix); exp je exponent. Nekonečno je hodnota dat v pohyblivé řádové čárce. Jedná se o situaci, kdy výsledek je mimo rozsah zobrazení. Data v pohyblivé řádové čárce pracují s pojmem plus nebo mínus nekonečno. To znamená, že konečné hodnoty mají své minimum a maximum, které jsou definovány pomocí interchange formátů. Hodnota nekonečno může být výstupní hodnota operace ale i vstupní hodnotou operace. Nečíselná hodnota představuje akronym Not a Number (zkratka NaN). Vzniká jako výsledek operací, kdy výsledek není definován. A tím pádem i vstupní hodnou operace. Hodnota NaN je generována například v případech odmocnina záporného čísla (př. 2, ) nebo inverzní sinus čísla vyššího než 1 (např. arcsin(5)). Standard IEEE 754 v těchto situacích definuje výsledek jako nečíselný - NaN. Standard definuje dvě hodnoty NaN, signaling NaN a quiet NaN. Více informací o hodnotách NaN a nekonečno je ve standardu IEEE 754. Nekonečno. NaN Not a Number - nečíselná hodnota. 9.4 Data v pohyblivé řádové čárce Sada konečných čísel v pohyblivé řádové čárce, která jsou zobrazitelná, je dána formátem. Od tohoto formátu se odvíjejí parametry, od kterých se odvíjí zápis a rozsah čísel v pohyblivé řádové čárce. Tyto parametry jsou dány standardem [IEEE ]: b, je radix, 2 nebo 10; p je počet číslic v significandu (přesnost); emax je maximální exponent; emin je minimální exponent, emin je (1 emax) pro všechny formáty. Vzorec (0902) obsahuje znaménko, significand a exponent. Significand může být vyjádřen dvěma způsoby, a to buď jako číslo s desetinou tečkou nebo jako celé číslo. První způsob představuje significand ve vědeckém tvaru (0903) a druhý způsob zobrazuje significand jako koeficient (0904). V rámci jednotlivých formátů mohou být zobrazeny následující hodnoty dat v pohyblivé řádové čárce: Significand ve vědecké formě. Nula se znaménkem a nenulové číslo ve formátu FP v = (-1) S x b e x m, (0903) (-1) S x m x b e Kde v je konečná hodnota čísla v pohyblivé řádové čárce; s je 0 nebo 1; b je základ (radix) číselné soustavy; e je celé číslo v rozmezí emin e emax; m je číslo zastoupené číselným řetězcem ve formě d 0 d 1 d 2 d p 1, kde d i je celé číslo 0 d i < b, a tedy 0 m < b. d 0 je MSB a d p-1 je LSB. Červená tečka je radix point. VŠB-TU Ostrava 103

110 9. Čísla v pohyblivé řádové čárce V textu výše je m je číslo s desetinnou tečkou a significand je vyjádřen ve vědecké formě. Significand má radix point mezi číslicemi s řádem nula a mínus jedna, d 0 a d -1. To znamená, že celočíselná část significandu v této formě je v rozmezí 0 až b-1. Significand lze také vyjádřit bez zlomkové části a to jako celé číslo bez znaménka, formule (0904). Tímto způsobem vyjádřený significand se nazývá koeficient a označuje se malým písmem c. Tato forma používá pro označení exponentu pojem quantum. Significand jako koeficient. Nula se znaménkem a nenulové číslo ve formátu FP v = (-1) S x b q x c, (0904) (-1) S x c x b q Kde v je konečná hodnota čísla v pohyblivé řádové čárce; s je znaménko s hodnotou 0 nebo 1; b je základ (radix) číselné soustavy; q je exponent (quantum), je to celé číslo v rozsahu emin q + p 1 emax, kde p je přesnost. Quantum je exponent používaný v případě, kdy significand je celé číslo bez znaménka; c je koeficient, což je celé číslo, které je zobrazeno pomocí číselného řetězce ve formě d 0 d 1 d 2 d p 1, kde d i je celé číslo v rozsahu 0 d i < b. Koeficient c je tedy celé číslo 0 c < b p, kde p je přesnost. Quantum. d 0 je MSB a d p-1 je LSB. Oba vzorce (0903) a (0904), jsou ekvivalentní a popisují přesně konečné hodnoty čísel v pohyblivé řádové čárce. Tyto hodnoty představují nulová a nenulová čísla. Ve vzorci (0903) je radix point mezi číslicemi d 0 a d -1, a ve vzorci (0904) po číslici d p-1. Vzorec (0905) definuje vztah mezi exponenty e a q a vztah (0906) definuje vztah mezi hodnotami significandu v jednotlivých zápisech. e = q + p -1 (0905) m = c/b p-1 (0906) Vztah mezi zápisy. Kde e je exponent, vzorec (0903); q je exponent (quantum), vzorec (0904); p je přesnost; m je significand ve vědeckém tvaru, vzorec (0903); c je significand jako koeficient, vzorec (0904); b je základ číselné soustavy. Vzorec (0907) vyjadřuje konečnou hodnotu čísla v pohyblivé řádové čárce a je založen na měřítku, která je dáno váhou odpovídající koeficientu p-1, měřítko je 1/b p-1. Všechny vzorce (0903), (0904) a (0907) jsou ekvivalentní a odpovídají stejné konečné hodnotě v pohyblivé řádové čárce. Significand v měřítku. VŠB-TU Ostrava 104

111 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO c v = ( 1) s b p 1 be (0907) (-1) S x c/b p-1 x b e Kde e je exponent; p je přesnost; c je significand jako koeficient; v je konečná hodnota čísla v pohyblivé řádové čárce; c/b p-1 je significand v měřítku; b je základ číselné soustavy. 9.5 Formáty definované standardem IEEE Nový standard IEEE definuje několik formátů pro pohyblivou řádovou čárku se základem 2 nebo 10. Pro všechny formáty je název složen ze dvou pojmů. První pojem je název číselné soustavy a druhý pojem je velikost slova v bitech, například binary32 nebo decimal 32. Formáty definované IEEE 754 se následně dělí na skupiny: Základní formáty jsou binary32, binary64, binary128, binary{k}, decimal64, decimal128 a decimal{k}. Základní formáty jsou vhodné pro provádění aritmetických operací, [IEEE ]. Formáty pro výměnu (interchange) se skládají ze základních formátů a navíc jsou zde formáty binary16 a decimal32. Kódování interchange formátů je definováno jako bitový řetězec, a tato definice umožňuje výměnu dat mezi různými platformami, [Muller_2010]. Standard IEEE nespecifikuje endianitu zápisu. Dále, formáty binary16 a decimal32 mohou být použity pouze pro účely paměti, kde není nutná vysoká přesnost a pro aritmetické operace se nepoužívají, [wiki_0910] a [wiki_0911]. Rozšířené formáty s rozšířenou přesností jejich kódování není specifikováno, může se ale shodovat s interchange formáty, [Muller_2010]. Základní formáty. Formáty pro výměnu Interchange formats. Poznámka k rozšířeným formátům Standard IEEE definuje i další typy rozšířených formátů následujícími větami: interchange format: tento formát má pevnou šířku polí, které jsou definovány tímto standardem extendable precision format: v tomto formátu je přesnost a rozsah definován a spravován uživatelem extended precision format: formát, který rozšiřuje podporované základní formát tím, že poskytuje větší přesnost a rozsah. Základní a formáty pro výměnu, interchange formats, jsou určeny pouze pomocí základu číselné soustavy, přesnosti a maximálním exponentem. Zbývající potřebné parametry jsou odvozeny a uvedeny v tabulkách a Standardy umožňují definovat další nové formáty pro velikost slova vyšší než 128 bitů. Nová velikost slova k je násobkem 32 a musí být VŠB-TU Ostrava 105

112 9. Čísla v pohyblivé řádové čárce větší nebo rovna 128. Obecně, nové názvy jsou binary{k} a decimal{k}. To znamená, že je možné definovat nový binární nebo dekadický formát, např. pro 320-bitové slovo a atd. Parametry binary16 binary32 binary64 binary128 binary{k} (k 128) k, počet bitů paměťového slova násobek p, přesnost k - round (4xlog2(k)) + 13 emax, maximální exponent (k-p-1) -1 Odvozené parametry bias, E-e emax Znaménkový bit w, šířka pole exponentu v bitech - round (4xlog2(k)) t, šířka pole significandu v bitech k w - 1 k, šířka paměti v bitech w + t Vysvětlení: Zdroj: IEEE Žlutá pole obsahují počáteční parametry a modrá pole odvozené parametry Tabulka Parametry binárního interchange formátu Parametry decimal32 decimal64 decimal128 decimal{k} (k 32) k, počet bitů paměťového slova násobek 32 p, přesnost x k/32 2 emax, maximální exponent x 2 (k/16+3) Odvozené parametry bias, E-q emax + p - 2 Znaménkový bit w + 5, šířka kombinačního pole v bitech t, šířka pole significandu v bitech k/ x k/16-10 k, šířka paměti v bitech w + t Zdroj IEEE Vysvětlení: Žlutá tabulka obsahuje počáteční parametry a modrá tabulka odvozené parametry. V desítkové soustavě, quantum q je exponent a significand je bez desetinné tečky, jsou použity pouze číslice: d 0d 1d 2. Tabulka Parametry dekadického interchange formátu VŠB-TU Ostrava 106

113 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Standard IEEE specifikuje kódování dat v pohyblivé řádové čárce v sekvenci bitů, ale nespecifikuje umístění v paměti. To je dáno typem endianu (Big endian, Little endian) který určuje pravidla pro umístění dat v paměti. Například řetězec bytů, který je uložen v paměti po bytech v pořadí é je uloženo v paměti jako číslo v dvojité přesnosti (binary64) * je zakódováno jako řetězec bytů ( ) H. Tento řetězec lze umístit do paměti od nižší adresy k vyšší adresa jako sekvence , potom se jedná o little endian, který je implementován například v architekturách x86 a Linux/IA-64. Ale umístění od nejnižší adresy k vyšší jako sekvence je umístění big endian, architektura PowerPC. Avšak některé architektury umožňují obě endianity, jedná se například o architektury IA-64, ARM, a PowerPC, [Muller_2010]. Záměna endianity potom představuje číslo * při formátu binary64. Endianita. V literatuře je možno nalézt různé názvy formátů pro pohyblivou řádovou čárku, některé z nich patří do historie, jiné se používají v reálné praxi, popřípadě se definují nové. Ve standardu IEEE byly definovány dekadické formáty pro číselné soustavy nezávislé na základu, [wiki_0906]. Avšak, nový standard IEEE definuje data v pohyblivé řádové čárce se základem 2 a 10. Používané a historické názvy jsou: Binary16, je 16-bitový formát s poloviční přesností (half precision). Tento formát je definován v IEEE a je využíván pouze pro účely ukládání. Binary32, je 16-bitový formát s jednoduchou přesností (single precision). Programovací jazyky používají deklaraci float nebo real. Tento formát je platný a prvně byl definován v IEEE Binary64, je 64-bitový formát s dvojitou přesností (double precision). Programovací jazyky používají deklaraci double. Tento formát je platný a prvně byl definován v IEEE Binary128, je 128-bitový formát se čtyřnásobnou přesností (double-double precision). Tento formát je definován v IEEE Decimal32, tento formát je definován IEEE a to pouze za účelem ukládání dat. Decimal64, tento formát je definován IEEE Decimal128, tento formát je definován IEEE bitový binární formát, nazvaný minifloat je formát, který není definován standardem. Používá se především pro vzdělávací a některé speciální účely, většinou v počítačové grafice, [wiki_0912]. 80-bitový formát, tzv. rozšířený formát (extended precision), byl binární formát pohyblivé řádové čárky, který byl použit v některých procesorech, tento formát není dnes rozšířen. Byl definován IEEE a v roce 2008 byl zrušen. Ekvivalentní názvy. 9.6 Kódování v binárním interchange formátu Pro lepší využití všech možných kombinací ve slově definuje standard dva formáty pro nenulové hodnoty, normalizovanou formu a subnormální formu čísel, obr Obě formy používají skrytý bit (hiden bit), kterému odpovídá číslice d 0 v significandu ve vědecké formě. Je to forma s desetinnou tečkou, m = d 0. d 1 d 2 d p-1. Skrytý bit je v normalizované formě roven 1 a v subnormální formě je skrytý bit roven 0, Binární interchange formát používá normalizovaný nebo subnormální formát. VŠB-TU Ostrava 107

114 9. Čísla v pohyblivé řádové čárce obr V situaci, kdy není možné vyjádřit hodnotu v subnormální nebo normalizované formě dochází buď k přetečení, nebo podtečení. Significand binárního normalizovaného čísla a při vědecké notaci má hodnotu MSB číslice d 0 rovnou 1. Potom significand ve vědecké podobě m je v rozsahu 1 m < 2 a exponent je v rozsahu emin e emax. Significand binárního subnormálního čísla a při vědecké notaci má hodnotu MSB číslice rovnou 0. Potom significand m je v rozsahu 0 < m < 1 a exponent je emin, který je roven emin = 1 - emax. emin = 1 emax, pro binary32, to je = -126 Skrytý (hidden) bit x 2 4 = x 2 5 = x 2 6 = x 2 7 Normalizovaný tvar x = x = x Subnormální tvar Skrytý bit hidden bit. Skrytý (hidden) bit Obr Normalizovaný a subnormální tvar pro binary32 Standard IEEE stanovuje zobrazení dat v pohyblivé řádové čárce, kde každé číslo v pohyblivé řádové čárce má v binárním ve vyměnitelném formátu (interchange format) pouze jedno kódování, tzn. je jedinečné - kanonické. V literatuře je také možné najít termín denormalizované číslo, jde o ekvivalentní pojem k subnormálnímu číslu. Subnormální čísla jsou nenulová nenormalizovaná čísla, která zaplňují mezeru kolem nuly, která vznikla v důsledku podtečení a zvýší se tak rozsah zobrazení, [wiki_0909]. Subnormální čísla jsou v rozmezí od minimálního subnormální čísla až po minimální normalizované číslo. Jedinečnost kódování - canonical. Standard IEEE uvádí Zobrazení dat v pohyblivé řádové čárce v binárních interchange formátech je kódováno do k bitů, do následujících třech polí tak, jak je znázorněno na obr : 1 bit - je znaménkový bit S, 0 je pro kladné znaménko a 1 pro záporné; w bity jsou pro posunutý exponent, E = e + bias (t = p 1) bity pro pole T significandu (trailing significand field), kde se zobrazuje řetězec číslic T = d 1 d 2 d p 1; vedoucí bit (leading bit) v significandu. d 0, je implicitně kódován v posunutém exponentu E. MSB bit significandu d 0 je často označován jako skrytý bit. Exponent E je zobrazen pomocí binárního posunutí. VŠB-TU Ostrava 108

115 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO 1 bit MSB w bitů LSB MSB t = p -1 bitů LSB S Sign E Biased exponent E0.. Ew-1 T Trailing significand field d1 d2.... dp-1 Biased exponent posunutý exponent. Formát binary32 Zdroj IEEE bitů bitů 0 S Sign E Biased exponent T Trailing significand field Pozice 0 má nejvyšší váhu. E0.. E7 d1 d2.... d23 Obr Definice polí pro binární interchange formát Uvedený formát slova platí pro zobrazení čísla v pohyblivé řádové čárce ve tvaru vědeckého zápisu, significand má radix tečku. Potom pole T (trailing significand field) obsahuje significand bez číslice d 0, která se nazývá skrytý bit. Hodnota tohoto bitu je definována tvarem zobrazení, normalizovaným nebo subnormálním tvarem. Jak bylo uvedeno dříve, skrytý bit je roven 1 pro normalizovaný tvar a roven 0 pro subnormální tvar. V textu, především ve vzorcích se používá exponent e (malé písmeno e). Ve formátu slova je použít posunutý exponent E (velké písmeno E). Exponent e je buď kladné nebo záporné číslo, ale posunutý exponent E je pouze nezáporné číslo. Posunutý exponent E aplikuje zobrazení binární posunutí ofsett bianry, a posuv je zde ozančován pojmem bias. Velké písmeno E je posunutý exponent. Malé písmeno e je exponent. Poznámka k zobrazení pomocí binárního posunutí nebo excess-k Standard IEEE používá termín biased exponent či biased čísla, a tyto termíny odpovídají zobrazení čísel se znaménkem v binárním posunutí offset binary nebo excessk. Bias je posuv, který je přičten k číslu a posouvá čísla se znaménkem do oblasti čísel bez znaménka. Standard 754 definuje bias roven 2 w-1-1, kde w je velikost pole exponentu. Příklad: Pro w = 4, je bias roven 7. Potom číslo -5 se zobrazuje jako posunuté číslo 2, protože = 2. Formát slova, který je znázorněna na obr , je schopen zobrazit všechny hodnoty v pohyblivé řádové čárce jako je např. NaN, nekonečno, konečné hodnoty a nuly. První pravidlo kódování je určit hodnotu posunutého exponentu E; druhé pravidlo se použije pro určení hodnoty pole T, obr NaN má jedinečné kódování, kdy v poli posunutého exponentu E jsou samé jedničky a pole T je nenulové. Hodnota NaN zahrnuje dvě dílčí hodnoty qnan a snan, které jsou kódovány v poli T. Pokud pole T začíná s 1, tzn. d 1 = 1 jedná se quiet NaN; a když pole T začíná 0, tzn. d 1 = 0, jde o signaling NaN. Reálná nenulová hodnota pole T slouží k diagnostickým účelům. Znaménkový bit nemá na hodnotu NaN žádný vliv. Kódování NaN. VŠB-TU Ostrava 109

116 9. Čísla v pohyblivé řádové čárce Nekonečno je kódováno tak, že v posunutém exponentu E jsou samé jedničky a pole T je nulové. Hodnota posunutého exponentu E pro nekonečno je o jednu větší než maximální hodnota pro konečná čísla v normalizovém tvaru. V závislosti na znaménkovém bitu je nekonečno plus nebo mínus. Kódování nekonečna. S Sign E Biased exponent T Trailing significand field E 0.. E w-1 d 1 d d p T = 11 T = 01 snan qnan Nečíselná hodnota T = 0 Plus nebo mínus nekonečno to Konečná nenulová hodnota v normalizované formě v = (-1) S * (1+T/2 p-1 ) * 2 E - bias T 0 Konečná nenulová hodnota v subnormální formě: v = (-1) S * (0+T/2 p-1 ) * 2 emin T = 0 Kladná nebo záporná nula, (-1) S * 0 * 2 emin Princip kódování polí. Significand je nulový. Obr Kódování polí pro binární interchange formát Poznámka k posunutému exponentu E Exponent e pro binary32 formát má tyto parametry: emax je 127, emin je -126, bias je 127, (b = 2 w-1 ), velikost pole posunutého exponentu w je 8 a posunutý exponent je v rozsahu 0 E 2 w-1, to je 0 E 255. Pokud je hodnota posunutého exponentu E samé jedničky, tzn., jde o číslo: 2 w - 1 = 255; potom se jedná o hodnoty NaN nebo nekonečno v závislosti na hodnotě v poli T. Pokud je hodnota posunutého exponentu E samé nuly, E = 0, pak jde o subnormální tvar konečných hodnot čísel nebo nuly v závislosti na hodnotě v poli T. Pokud posunutý exponent E je v rozsahu 1 < E < 254, pak je kódována konečná hodnota čísla v normalizovaném tvaru. Exponent emax je kódován do pole posunutého exponentu E jako hodnota samé jedničky mínus 1, to je 2 w -2 = 254, pro binary32. Exponent emin je kódován do pole posunutého exponentu E jako hodnota samé nuly plus 1, což je 1. VŠB-TU Ostrava 110

117 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Konečná hodnota floating point čísla v normalizovaném tvaru je kódována, když posunutý exponent E je v rozsahu od 1 do 2 w 2. To znamená, že v posunutém exponentu E nejsou samé nuly ani jedničky. Potom exponent e (malé písmeno e) je roven E - bias. Pole T obsahuje bitový řetězec d -1d -2 d p-1, což je část significandu. Skrytý bit je 1, a proto vedoucí bit - leading bit je d 0 = 1. Celý significand ve vědecké formě je spojení skrytého bitu d 0 s radix tečkou a bitovým řetězcem z pole T. Konečná hodnota je potom dána formulí (0908), která je modifikací formule (0903) pro significand ve vědeckém zápisu. Další možností je upravit vztah (0907), protože víme, že skrytý bit d 0 je 1 a zlomkovou část significandu vyjádříme pomocí měřítka. V tomto případě se řetězec v poli T chápe jako celé číslo integer a měřítko je 1/2 p-1, kde p je přesnost. Tím získáme novou formuli (0910) pro výpočet hodnoty v normalizovaném tvaru pro binární interchange formát. Kódování pro normalizovaný tvar. v = ( 1) S m 2 E bias (0908) T v = ( 1) S (1 + 2 p 1) 2E bias (0909) T v = ( 1) S (0 + 2 p 1) 2emin (0910) Kde v je konečná hodnota čísla v pohyblivé řádové čárce; S je znaménko; m je significand ve vědeckém zápisu, s radix tečkou; T je hodnota v poli T (trailing significand field); je to celočíselná hodnota; p je přesnost; 2 p-1 je měřítko; E je hodnota celého čísla bez znaménka, posunutý exponent; bias je posun (offset), zobrazení binárního posuvu je 2 w-1-1, kde w je velikost pole posunutého exponentu; emin je minimální hodnota exponentu a to je emax 1. Konečná hodnota v subnormálním tavru je kódována, když posunutý exponent E obsahuje samé nuly a pole T je nenulové. To znamená, že exponent e je roven emin. Skrytý bit pro subnormální tvar je roven 0, proto vedoucí číslice significandu je d 0 = 0. Pole T obsahuje část Kódování pro subnormální tvar. Poznámka k hranici mezi normalizovaným a subnormálním číslem Vysvětlení je uvedeno pro formát binary32, kde emax je 127, emin je -126 a bias je 127. Nejmenší normalizované číslo s exponentem e = -126 je 1.0 x 2-126, posunutý exponent je E = 1. Následující menší číslo je 1.11 x = x Modrý tvar je subnormální číslo s exponentem e = -126 a significand je nenulový, MSB bit je roven nule. Pro tuto situaci posunutý exponent je E = 0. Když posunutý exponent E = 0 a significand je roven nule, pak exponent e = -126 a hodnota je 0.0 x = 0.0, což je kladná nula. VŠB-TU Ostrava 111

118 9. Čísla v pohyblivé řádové čárce significandu bez skrytého bitu d 0. Potom celý significand ve vědecké formě je zřetězení skrytého bitu d 0 s radix tečkou a bitovým řetězcem z pole T. Pro výpočet hodnotu subnormální formy lze použít formulu (0908) nebo (0910). Formule (0910) je odvozena z formuly (09074) a aplikaje měřítko na hodnotu pole T. Hodnota měřítka je odvozena od přesnosti p, a je rovna 1/2 p-1. Nula je zakódována, když hodnota posuntého exponentu E a pole T jsou samé nuly. Pouze znaménkový bit definuje, zda je nula kladná nebo záporná. Když výsledkem operace v pohyblivé řádové čárce je nula, norma preferuje kladnou nulu, takže slovo je nulové. Kódování pro subnormální tvar. Kódování nuly. NaN mínus - Normal. Sub.. Sub Normal. + NaN plus Obr Znázornění hodnot na číselné ose Obr ukazuje pořadí hodnot na číselné ose pro binární data v pohyblivé řádové čárce. Existují i čísla, která nemohou být zobrazena. To jsou čísla od nuly po oblast subnormálních čísel. Po subnormálních číslech následují normalizovaná čísla, pak nekonečno a nakonec NaN. 9.7 Dekadický interchange formát v pohyblivé řádové čárce Dekadický interchange formát je obdobný jako binární formát pro výměnu dat, akorát je určen pro číselnou soustavu se základem 10. Obdobně jako binární formát, dekadický formát je definován parametry - přesností p, maximálním exponentem emax a velikostí slova pomocí k-bitů. Přesnost p udává počet dekadických číslic v significandu, což neodpovídá počtu bitů jako v binárním formátu. Standard IEEE definuje tyto dekadické interchange formáty pro pohyblivou řádovou čárku: decimal32, decimal64, decimal128 a decimal{k}. Decimal{k} je formát, který je definován uživatelem a k musí být násobkem 32 a vyšší než 128. Řazení hodnot dekadického interchange formátu na reálné číslové ose je znázorněno na obr Tento formát má následující hodnoty: Poznámka ohledně pojmu quantum a exponent Dva exponenty e a q jsou použity v interchange formátu v pohyblivé řádové čárce a vztah mezi nimi je e = q + p - 1. Pro lepší pochopení rozdílů mezi nimi, použijeme příklad pro formáty binary32 a decimal32. Minimální exponent je definován emin = 1 emax. Formát binary32 je definován parametry, přesnost p 2 = 24 bitů, emax 2 = 127, bias 2 = 127. Rozsah exponentu e je -126 e 127 a posunutý exponent E má rozsah 1 E 254. Tento rozsah je pro zobrazení konečných hodnot a normalizovaných čísel. Formát decimal32 je definován parametry, přesnost p 10 = 7 číslic, emax 10 = 96, bias 10 = 101. To znamená, že exponent e je v rozmezí -95 e +96, ale exponent jako quantum q je v rozmezí -95 q + p => -101 q 90 a posunutý exponent E má hodnoty v rozsahu 0 E 191. Tento rozsah q quantum je používán konečnými hodnotami. Nula, nekonečno a NaN nejsou kódovány posunutým exponentem. Dekadický interchange formát používá quantum namísto exponentu. VŠB-TU Ostrava 112

119 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO NaN - nečíselná hodnota má dva tvary, signaling NaN a quiet NaN. Nekonečno, plus a mínus. Konečná čísla, jedná se o hodnoty nula a nenulová čísla se znaménkem. Hodnoty pro dekadický formát. NaN - Konečná záporná čísla Konečná kladná čísla + NaN mínus plus Obr Hodnoty na ose reálných čísel pro dekadický formát Pojmy normalizovaná a subnormální forma se spojují zásadně s binárními formáty. Dekadický formát pouze používá konečné čísla, které formát dokáže zobrazit. Pokud je významných číslic significandu méně než je přesnost, používá se termín preferovaný formát, detaily později. Vztah (0911) definuje konečné hodnoty v dekadickém interchange formát a je odvozen ze vztahu (0904). Significand v dekadickém formátu je ve formě koeficientu C. Kde v = ( 1) S C 10 q (0911) Significand jako koeficient C. v je konečná hodnota čísla v floating point; S je znaménko; C je koeficient jako significand, který může být vyjádřen dekadicky nebo binárně; q je quantum. Quantum je zobrazeno v posunutí. 1 bit MSB w + 5 bitů LSB MSB t = J x 10 bitů LSB S Sign G T Trailing significand field Combination field G 0... G w+4 Dekadické kódování: J- udává počet decletů, potom pole obsahuje 3 J = p 1 číslic Binární kódování: t bitů zobrazuje hodnoty od 0 do 2 t 1 Obr Definice polí pro dekadický formát Zdroj: IEEE Pozice 0 má nejvyšší váhu. Pole na obr , pro dekadické interchange formáty v pohyblivé řádové čárce, jsou definována standardem IEEE Zobrazení floating point dat v decimálních vyměnitelných (interchange) formátech je kódováno do k bitů a následujících tří polí, jejichž detailní rozložení a kanonické (preferované) kódování je popsáno níže: a) 1bit - znaménko S. VŠB-TU Ostrava 113

120 9. Čísla v pohyblivé řádové čárce b) w + 5 bitů - pole G (combination field) kóduje jednu z možných hodnot pro dekadický formát. Když je kódováno konečné číslo, potom pole G kóduje exponent q a čtyři bity significandu. Pokud se jedná o a exponent q. v tomto poli je zakódováno quantum q a čtyři nejvýznamnější bity significandu. Posunutý exponent E je q + bias a je kódován do w + 2 bitů, přičemž hodnota prvních dvou bitů posunutého exponentu má hodnotu buď 0, 1, nebo 2. c) t-bitů pole T (trailing significand field) obsahuje J 10 bitů, ve kterých je zobrazena větší část significandu. Když je toto pole kombinováno s vedoucími (leading) bity significandu z pole G, pak formát kóduje celkem p = 3 J + 1 desítkových číslic. Formát slova pro dekadické formáty neobsahuje hodnotu posunutého exponentu E a significand C v přímém tvaru jako čísla, avšak tyto hodnoty jsou zakódovány v poli G a v poli T. Pro dekadický formát je definován nový termín declet", který je spojován s dekadickým kódováním significandu C. Declet obsahuje 3 desítkové číslice a šířka decletu je 10 bitů. Declet je kód, který kóduje tři dekadické číslice do pole o 10 bitech. Proto je velikost pole T vždy definována jako násobek 10 bitů. Kanonický tvar je nový termín, který se vztahuje k dekadickému interchange formátu v pohyblivé řádové čárce. Termín kanonický znamená, že kombinace v jakýchkoli polích je definována standardem IEEE Všechny kombinace v polích nebo decletech se nepoužívají, a tyto nepoužité kombinace se nazývají jako nekanonické. Kanonický tvar je produkován jakoumkoli operací v pohyblivé řádové čárce a nekanonický tvar je přijat operandy. Kanonický tvar se vztahuje na všechna pole, nejen na declety. Proto některé kombinace v poli G a T jsou nekanonické. Declet je kód, kde 3 dekadické číslice jsou zakódovány do 10 bitů. Kanonická forma. Poznámka k decletu, IEEE Declet je skupina 3 dekadických číslic zakódovaná do deseti bitů. Pro toto kódování IEEE 754 definuje kódování s názvem densely-packed-decimal. Potom možných kombinací, je použitých kombinací, které odpovídají kanonickým decletům, zatímco 24 kombinací jsou nekanonické declety. Kanonické declety jsou výsledkem operace a nekanonické declety jsou akceptovány operandy. Hodnoty čísla pro dekadický interchange formát v pohyblivé řádové čárce jsou odvozeny ze znaménka, pole G a pole T. Kódování začíná leading bity v poli G, obr Podrobnější popis je uveden ve standardu IEEE Hodnota NaN je kódována kombinací (G 0...G 4) = a bit G 5 kóduje quiet a signaling NaN. Znaménko a zbývající bity pole G nemají žádný vliv na NaN. Pole T obsahuje hodnoty, které rozlišují různé hodnoty NaN. Zbývající bity (G 6 až G W+4) jsou v kanonické formě nulové. Nekonečno je kódováno kombinací (G 0...G 4) = 11110, bez ohledu na zbývající bity v polích G a T. Znaménko určuje, zda jde o plus nebo mínus nekonečno. Kanonický tvar hodnoty nekonečna je definován tak, že zbývající bity v poli G (G 5...G W + 4) jsou nulové a pole T je také rovno 0. Kódování NaN. Kódování nekonečna. VŠB-TU Ostrava 114

121 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO G Kombinační pole G 0 G 5 Pozice 0 má nejvyšší váhu. G 0... G w snan qnan Nečíselná hodnota G 0 G Plus nebo mínus nekonečno E a d0 nebo d0d1d2d3 Konečná nenulová čísla, v = (-1) S * C * 10 E - bias Dekadicky d0 = 0 nebo binárně d0d1d2d3 = 0000 Pole T T = 0 Kladná nebo záporná nula (-1) S * 0 * 10 q Significand je nula. Obr Kódování hodnoty v desítkovém výměnném formátu Hodnota nula je kódována, když significand je roven nule, bez ohledu na quantum. Znaménkový bit určuje, zda nula je kladná nebo záporná. Significand je roven nule, když pole T a leading bity nebo číslice (d0d1d2d3) jsou rovny nule. Leading bity nebo číslice koeficientu jsou kódovány v poli G. Konečná hodnota dekadického interchange formátu je dána vzorcem (0912), který je odvozen ze vztahu (0911). Significand ve tvaru koeficientu C může být vyjádřen pomocí dekadického nebo binárního celého čísla. Z formátu není možné rozlišit, zda formát koeficientu je binární nebo dekadické číslo. Proto, zda koeficient je binární nebo dekadické číslo je dáno implementací, nebo je předem dohodnuta. Kódování nuly. Kódování konečné hodnoty. v = ( 1) S C 10 E bias ; (0912) (-1) S x C x 10 E-bias Kde v je konečná hodnota čísla v pohyblivé řádové čárce; S je znaménko;. E je posunutý exponent, který bude zakódován v binární formě; bias je definován konstantou podle formátu; E-bias, je quantum q, je to exponent v případě, kdy significand je celé číslo; C (velké písmeno C), je significand ve tvaru koeficientu a je vyjádřen dekadicky nebo binárně jako celé číslo bez znaménka. Significand C je koeficient buď v binární nebo dekadické číselné soustavě. Obr znázorňuje situaci kódování dekadických significandů C 10 ve tvaru koeficientu, který má p desítkových číslic v BCD kódu. Pole G kóduje posunutý exponent E a MSB desítkovou číslici significandu d 0, to je pole G kóduje 4 bity BCD kódu desítkové číslice. Pole T potom VŠB-TU Ostrava 115

122 9. Čísla v pohyblivé řádové čárce obsahuje J decletů significandu, kde každý declet kóduje 3 BCD čísla. Z tohoto důvodu pole T obsahuje p-1 desítkových číslic d 1d 2d 3...d P-1. Dekadický significand C 10 ve tvaru koeficientu je zřetězení MSB číslice d 0 a dekadických číslic pole T d 1d 2d 3 d p-1. Declet využívá kódování densely-packed decimal, které je popsáno v následující podkapitole. Detailní popis kódování MSB číslice je ve standardu IEEE Sestavení dekadického koeficientu C. Slovo uložené v k bitech 1 bit MSB w + 5 bitů LSB MSB t = J x 10 bitů LSB S Sign G Combination field G0... Gw+4 T Trailing significand field J decletů dává 3 J = p 1 číslic Kódování Kódování: Densely-packed decimal MSB w + 2 bitů LSB MSB 4 + J x 10 bitů LSB S Sign Biased exponent E Decimal significand C E0... Ew+1 d 0 d 1 d 2 d p-1 v = (-1) S x C10 x 10 (E 2 -bias) C10 = d0 d1 d2.. dp-1, kde d i je dekadická číslice v BCD kódu Obr Základní schéma kódování dekadického significandu Poznámka ke vztahu mezi binárním a dekadickým significandem Decimal32 má přesnost p = 7, což znamená aplikaci 7 desítkových číslic a rozsah significandu je od 0 do Odpovídající rozsah v binární číselné soustavě je od 0 do F 16. Vyšší binární čísla nejsou kanonická. Důležité je, že nejvýznamnější 4 bity binárního čísla mají pouze hodnoty od 0000 do Proto kombinační pole G pro interchange formát kóduje pouze čísla od 0 do 9. Obr ukazuje podobnou situaci pro binární significand ve tvaru koeficientu, který má t+4 bity. Pole G kóduje posunutý exponent E a 4 vedoucí bity (leading bits) significandu d 0d 1d 2d 3. Pole T obsahuje zbývající bity binárního significandu d 4d 5d 6...d t+3. Binární significand C 2 je koeficient jako celého čísla bez znaménka a vzniká zřetězením 4 vedoucí bity (leading bits) a zbývajících bitů z pole T d 0d 1d 2d 3 + d 4d 5d 6...d t+3. Podrobnější popis je uveden v IEEE Sestavení binárního koeficientu C. VŠB-TU Ostrava 116

123 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Slovo uložené v k bitech 1 bit MSB w + 5 bitů LSB MSB t = J x 10 bitů LSB S Sign G Combination field G0. Gw+4 T Trailing significand field t bits Kódování Binární číslo S Sign MSB w + 2 bitů Biased exponent E LSB MSB d0d1d2d3 4 + J x 10 bitů Significand C LSB E0 Ew+1 d 0d 1d 2d 3 d 4d 5d 6d 7.. d td t+1d t+2d t+3 C2 = d0 d1 d2 d3 d4 dt dt+1 dt+2 dt+3 kde d i je binární číslice 0 nebo 1 v = (-1) S x C2 x 10 (E 2 -bias) Obr Základní schéma kódování pro binární significand Počet dekadických číslic binací bitů v BCD kódu kombinací Počet kom- Počet použitých Počet možných Nadbytečnost n1 10 n1 n2 = n1 x 4 2 n2 2 n2 10 n Tabulka Zdůvodnění zavedení decletů 9.8 Declet and densely-packed decimal BCD kód (Binary Code Decimal), je kód pro desítkovou číselnou soustavu v binárním digitálním systému. BCD používá 4 bity a tato čtveřice bitů definuje 16 možných kombi- Declet je kódování tří desítkových číslic do deseti bitů. nací. Pouze 10 kombinací z 16 je používaných a 6 kombinací je nadbytečných. Tabulka ukazuje následující výpočty a v případě 3 dekadických číslic, je redundance větší než užitečné kombinace. To vede k tomu, že v 10 bitové n-tici je všech možných kombinací a z toho kombinací se použije pro kódování a 24 kombinací je redundantních. Toto je základní myšlenka decletu. Standard IEEE definuje declet jako kódování tří desítkových číslic do deseti bitů pomocí kódovacího schématu s názvem densely- VŠB-TU Ostrava 117

124 9. Čísla v pohyblivé řádové čárce packed decimal. Pravidla tohoto kódování jsou uvedena v tabulce 09-04, [wiki_0907]. Základní přístup k návrhu kódování v densely-packed formátu je v souladu s literaturou, [Cowlishaw_2000]. Zakódované hodnoty v denselypacked Dekadické číslice b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 d2 d1 d0 Hodnoty kódování popis a b c d e f 0 g h i 0abc 0def 0ghi (0-7)(0-7)(0-7) Tři malé číslice a b c d e f i 0abc 0def 100i (0-7)(0-7)(8-9) a b c g h f i 0abc 100f 0ghi (0-7)(8-9)(0-7) g h c d e f i 100c 0def 0ghi (8-9)(0-7)(0-7) a b c 1 0 f i 0abc 100f 100i (0-7)(8-9)(8-9) d e c 0 1 f i 100c 0def 100i (8-9)(0-7)(8-9) g h c 0 0 f i 100c 100f 0ghi (8-9)(8-9)(0-7) Dvě malé číslice, jedna velká Jedna malá číslice, dvě velké x x c 1 1 f i 100c 100f 100i (8-9)(8-9)(8-9) Tři velké číslice Zdroj: Tabulka Kódovací schéma densely-packed decimal 9.9 Zaokrouhlování Formát pohyblivé řádové čárky může zobrazovat přesně jen některá čísla, která lze zakreslit na osu reálných čísel jako body. Na obr , jsou to zelené body a šířka mezery mezi nimi je závislá na přesnosti a hodnotě exponentu. Mezi dvěma nejbližšími zelenými body, je nekonečné množství čísel, která nemohou být zobrazena. Nicméně čísla, která nelze vyjádřit, mohou být výsledkem operací, a proto je nutné umístit je do interchange formátu s pohyblivou řádovou čárkou. Proto se tato čísla zaokrouhlují k jednomu sousednímu číslu z dvou krajních čísel. Reálná číselná osa - + Zaokrouhlování x 2 e Pro poloviční přesnost: x 2 e x 2 e Zaokrouhlování nejblíže k sudé, standardní zaokrouhlování. Obr Zobrazitelná čísla V matematice, existuje více pravidel, a také názvů pro zaokrouhlování. Ale základní pravidla pro zaokrouhlování v pohyblivé řádové čárce jsou uvedena ve standardu IEEE 754, viz [wiki_0906] a [IEEE ]. VŠB-TU Ostrava 118

125 Číslo Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Zaokrouhlení k nejbližsí hodnotě. Číslo se zaokrouhluje na nejbližší možné číslo. Problém nastane, když zaokrouhlované číslo leží uprostřed, pak je vzdálenost obou nejbližších bodů stejná. V desítkové číselné soustavě, to je číslo 5, např. 12,345, vzdálenost od 12,34 a 12,35 je stejná a činí 0,005. V tomto případě pro zaokrouhlování existují dvě definice. Zaokrouhlení nejblíže k sudé, (Round to nearest, ties to even). Znamená to, že číslo se zaokrouhluje na nejbližší hodnotu. Když je číslo přesně uprostřed intervalu, zaokrouhlí se na sudou hodnotu. Toto zaokrouhlování je výchozí pro čísla vyjádřená v binární formě pohyblivé řádové čárky, a je také doporučením pro desítkovou formu. Zaokrouhlení pryč od nuly, (Round to nearest, ties away from zero). Znamená to, že číslo se zaokrouhluje na nejbližší hodnotu. Když je číslo přesně uprostřed intervalu, zaokrouhluje se k nejbližší hodnotě ve směru od nuly. Pro kladná zaokrouhlovaná čísla - na vyšší hodnotu, a pro záporná zaokrouhlovaná čísla - na nižší číslo. Toto zaokrouhlování lze použít pro dekadická čísla v pohyblivé řádové čárce. Směrové zaokrouhlování, (Direction rounding). Čísla se zaokrouhlí ve směru, který je předem definován. Zaokrouhlení směrem k 0, (Round toward 0) zaokrouhlování směrem k 0. Tento princip zaokrouhlení je znám také jako zkrácení - truncation. Zaokrouhlení směrem k +, (Round toward + ) zaokrouhlování směrem k plus nekonečnu, a tento princip je také znám pod názvem zaokrouhlení směrem nahoru. Zaokrouhlení k nejbližší hodnotě nejblíže k sudé pryč od nuly Zaokrouhlení k 0 Směrové zaokrouhlení Zaokrouhlení k + Zaokrouhlení k - : : : : : Tab Výsledky u rozdílných typů zaokrouhlování VŠB-TU Ostrava 119 Zaokrouhlování nejblíže hodnotě. Zaokrouhlování k nejbližší a sudé - default. Zaokrouhlování k nejbližší a pryč od nuly. Zaokrouhlování směrem k nule - truncation. Zaokrouhlování směrem plus nekonečnu směrem nahoru.

126 9. Čísla v pohyblivé řádové čárce Zaokrouhlení směrem k, (Round toward - ) zaokrouhlování směrem k mínus nekonečnu a tento princip je také znám pod názvem zaokrouhlení směrem dolu. Zaokrouhlování směrem minus nekonečnu směrem dolu. Pro lepší pochopení je níže uvedena tabulka 09-05, která ukazuje výsledky pro různé typy zaokrouhlování. Se směrovým zaokrouhlováním nejsou problémy. Pro zaokrouhlování k nejbližším číslům jsou rozdíly v situacích, kdy číslo leží přesně uprostřed intervalu. V těchto případech se aplikuje jedno z pravidel - směrem k sudé nebo směrem od nuly. Více informací o praktickém zaokrouhlení výsledku je v následující kapitole o provádění aritmetických operací nad čísly v pohyblivé řádové čárce. Příklady Je dáno číslo A, které zaokrouhlete na dvě desetinná místa; a) nejblíže k sudé; b) pryč od nuly; c) směrem k 0; d) směrem k + ; e) směrem k A = Výsledek: a) -0.74; b) -0.74; c) -0.73; d) -0.73; e) -0.74; 2. A = Výsledek: a) ; b) ; c) ; d) ; e) ; 3. A = Výsledek: a) 2.58; b) 2.58; c) 2.57; d) 2.58; e) 2.57; 4. A = Výsledek: a) 5.25; b) 5.25; c) 5.24; d) 5.25; e) 5.24; 5. A = Výsledek: a) -3.13; b) -3.13; c) -3.12; d) -3.12; e) -3.13; 9.10 Nečíselná hodnota NaN Nečíselná hodnota (Not a Number - NaN) je symbolická hodnota, která vzniká jako možný výsledek aritmetických operací a funkcí. NaN znamená, že něco v operaci nebo funkci, není z matematického hlediska správně. Typickým příkladem je odmocnina záporných čísel, dělení nekonečnem, násobení nekonečnem, a tak dále. Hodnotu NaN může mít i operand vstupující do aritmetické operace či funkce. Literatura [wiki_0908] a [Goldberg_1991] uvádí situace, kdy je hodnota NaN použita. Existují tři druhy operací, jejichž výsledek může být NaN: Hodnota NaN. Operace, kdy alespoň jeden z operandů je NaN. V této situaci je vstupní hodnota NaN výsledkem předchozí aritmetickou operací. Neurčité formy: Dělení, 0/0 a ± /±. Poznamenávám, že při dělení konečného čísla nulou je výsledek nekonečno. Násobení, 0 ± a ± 0. Sčítání, + ( ), ( ) + a ekvivalentní odčítání. V některých případech umocnění, funkce power, pow. Operace s komplexními výsledky, například: Odmocnina záporného čísla. Logaritmus záporného čísla. Inverzní sinus nebo cosinus čísla, které je menší než -1 nebo větší než +1. Standard IEEE 754 definuje dvě hodnoty NaN, quiet NaN a signaling NaN. Základní rozdíl je v nastavení výjimky (exception), kdy pouze signaling NaN nastavuje výjimku a dochází k následnému přerušení, pokud je přerušení povoleno. Více je uvedeno v literatuře [wiki_0914], VŠB-TU Ostrava 120

127 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO [wiki_0915], [wiki_0916], [Muller_2010], [Ergovac_Lang_2004], [IEEE ], [wiki_0908], [Goldberg_1991] Nekonečno Nekonečno je normální matematickým výraz a jeho použití se vztahuje k matematickým limitám. Nekonečno v případě pohyblivé řádové čárky lze chápat jako číslo, které nepatří mezi konečná čísla. Symbol nekonečna je. Nekonečno může být získáno aritmetickými operacemi nebo funkcemi, a také to může být vstupní operand. Následující operace s nekonečnem nezpůsobuje žádné výjimky, [IEEE ]: Hodnota nekonečno. Sčítání nebo odčítání konečného čísla s nekonečnem Násobení nekonečna konečnými čísly, které nejsou rovny nule. Dělení nekonečna a konečných čísel. Dělení konečného čísla nulou je nekonečno. Druhá odmocnina kladného nekonečna (+ ). Zbytek (x, ). Čitatel je konečné přirozené číslo x a jmenovatel je nekonečno. Výsledkem je konečné číslo x. Převod nekonečna na nekonečno v jiném formátu. Nekonečno je normální výsledek některých operací. Nastavení výjimek s následným ošetřením (trap handler), [IEEE ]: Nekonečno je neplatný operand. Nekonečno je vytvořeno z konečných operandů přetečením nebo dělením nulou. Zbytek (subnormální číslo, ) signalizuje podtečení. Čitatel je subnormální číslo a jmenovatelem je nekonečno Základní výjimky Výjimky jsou zvláštní situace, které mohou nastat při operacích s pohyblivou řádovou čárkou nebo funkcemi. Tyto výjimky (exception) se také nazývají příznaky (flags) a každá má svůj definovaný způsob ošetření (handling). Pojem handling znamená spuštění podprogramu ošetřujícího výjimku (trap handler or the interrupt service routine), když je přerušení povoleno. Více o přerušeních procesoru je v literatuře [wiki_0914], [wiki_0915] a [wiki_0916]. Standard pouze definuje nastavení výjimek a následující seznam uvádí typické situace, kdy k výjimce dojde. Více informací naleznete v literatuře [wiki_0906], [Muller_2010], [Ergovac_Lang_2004] a [IEEE ]. Skutečná realizace pohyblivé řádové čárky může stanovit další výjimky. Základní výjimky podle standardu IEEE 754 jsou uvedené níže: Exception or flags. Invalid operation - neplatné operace. Příznak (flag) neplatné operace je aktivován v těchto situacích: Násobení nuly nekonečnem. Sčítání plus nekonečna a mínus nekonečna. Dělení nuly nulou nebo dělení nekonečna nekonečnem. Druhá odmocnina, pokud je operand menší než nula. A další. Division by zero - dělení nulou. Příznak (flag) je nastaven v těchto situacích: Dělitel je nula a dělenec je konečné nenulové číslo, výsledek je nekonečno a znaménko je dáno operací exclusive OR znamének obou operandů. Logaritmus nuly, výsledek je mínus nekonečno. VŠB-TU Ostrava 121

128 9. Čísla v pohyblivé řádové čárce Overflow - přetečení. Výsledek je příliš velké číslo, aby bylo umístěno de formátu zobrazení čísel ve floating point. I samotné zaokrouhlování může také vést k přetečení. Výsledek pak je plus nebo mínus nekonečno. Underflow - podtečení. Výsledek je příliš malý, aby mohl být umístěn do formátu pro zobrazení floating point čísel a zároveň je nepřesný. Tato čísla leží mezi nulou a čísly v normalizovaném tvaru. Subnormální čísla rovněž patří do tohoto intervalu. Nepřesnost. Výsledek je zaokrouhlen Realizace Realizace pohyblivé řádové čárky může být provedena pomocí hardwaru nebo softwaru. Hardwarová implementace je rychlejší způsob, doba provádění operací je minimální. Naopak, softwarová realizace je pomalejší způsob a doba uskutečnění operací je delší. Realizace. Realizace hardwarem je známá jako FPU (Floating point Unit). FPU je vyroben výrobcem procesoru jako samostatná jednotka. V současné době většina používaných procesorů mají již přímo implementovány FPU. Instrukční sada na FPU obvykle obsahuje pokyny pro základní operace pohyblivé řádové čárky jako sčítání, odčítání, násobení a dělení. Složitější funkce, jako logaritmus nebo trigonometrické funkce, jsou implementovány softwarem. Realizace pomocí softwaru závisí na podpoře hardwaru. V případě neexistující hardwarové podpory, všechny definice formátů s pohyblivou řádovou čárkou a provádění základních operací v pohyblivé řádové čárce jsou realizovány pomocí softwaru. V případě existence podpory hardwaru, softwarové knihovny implementují chybějící operace a funkce. Poznámka k nejpomalejší operaci Dělení patří mezi nejpomalejší operace procesoru pro všechny typy dat. Dělení není realizováno pomocí kombinačního obvodu. Provádění operace dělení je dáno algoritmem, který představuje posloupnost sčítání a odčítání. Realizace je pak pomocí klasického digitálního synchronního systému a posloupnost je generována konečným automatem (FSM). První verze standardu IEEE 754 byla vydána v roce 1985 a její revidovaná verze v roce Dnes, je pohyblivá řádová čárka podle této normy realizována v mnoha procesorech a systémech. Realizace binární aritmetiky s pohyblivou řádovou čárkou je známá dlouho a záleží na výrobci procesoru. Aritmetika pro decimální pohyblivou řádovou čárku podle standardu IEEE je novější a je již zavedena v praxi. Web speleotrove.com uvádí výčet architektur a knihoven pro aritmetiku decimální pohyblivé čárky podle normy IEEE , [spel_0901]: 9.14 Reference [Burks_1946] Burks, Arthur W.; Goldstine, Herman H.; Von Neumann, John (1946). Preliminary discussion of the logical design of an electronic computing instrument. Technical Report, Institute for Advanced Study, Princeton, NJ. In Von Neumann, Collected Works, Vol. 5, A. H. Taub, ed., MacMillan, New York, 1963, p. 42: VŠB-TU Ostrava 122

129 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO 5.3. 'Several of the digital computers being built or planned in this country and England are to contain a so-called "interchange decimal point". This is a mechanism for expressing each word as a characteristic and a mantissa e.g would be carried in the machine as ( ,03), where the 3 is the exponent of 10 associated with the number.' [Cowlishaw_2000] Cowlishaw, M. F. ( ). "Summary of Densely Packed Decimal encoding". Retrieved ; on line [Cowlishaw_2002] Cowlishaw, M. F. (May 2002). "Densely packed decimal encoding". IEE Proceedings Computers and Digital Techniques (Institution of Electrical Engineers) 149 (3): doi: /ip-cdt: ISSN [IEEE ] IEEE Std , IEEE Standard for Binary Interchange-Point Arithmetic, 1985 [Ergovac_Lang_2004] Milos D. Ercegovac, Tomas Lang: Digital Arithmetic; Morgan Kaufmann Publishers, 2004, ISBN [Goldberg_1991] David Goldberg: What Every Computer Scientist Should Know About Interchange-Point Arithmetic; published in March, 1991 issue of Computing Surveys. Copyright 1991, Association for Computing Machinery Inc. [IEEE ] IEEE Std , IEEE Standard for Interchange-Point Arithmetic, 29 August 2008, revision of IEEE [ISO/IEC_0901] ISO/IEC : Information technology - Language independent arithmetic - Part 1: Integer and floating point arithmetic [Muller_2010] Jean-Michel Muller, Nicolas Brisebarre, Florent de Dinechin, Claude-Pierre Jeannerod, Vincent Lef`evre, Guillaume Melquiond, Nathalie Revol, Damien Stehl e, Serge Torres: Handbook of Interchange-Point Arithmetic; Birkhauser Boston, a part of Springer Science+Business Media, LLC 2010; ISBN ; e-isbn [Randeli_1982] B. Randell (1982). From analytical engine to electronic digital computer: the contributions of Ludgate, Torres, and Bush. IEEE Annals of the History of Computing, 04(4). pp [RFC 0382] [Rojas_1997] MATHEMATICAL SOFTWARE ON THE ARPA NETWORK; 1972; on line R. Rojas: "Konrad Zuse s Legacy: The Architecture of the Z1 and Z3". IEEE Annals of the History of Computing 19 (2): ; on line [spel_0901] General Decimal Arithmetic; on line VŠB-TU Ostrava 123

130 9. Čísla v pohyblivé řádové čárce [wiki_0901] [wiki_0902] [wiki_0903] [wiki_0904] Floating point; on line Scientific notation; on line Engineering notation; on line Normalized number; on line [wiki_0905] Significand; on line [wiki_0906] [wiki_0907] IEEE floating point; or on line Densely packed decimal; on line [wiki_0908] NaN; on line [wiki_0909] [wiki_0910] [wiki_0911] Denormal number; on line Half-precision interchange-point format; on line decimal32 interchange-point format; on line [wiki_0912] Minifloat; on line [wiki_0913] International System of Units; on line [wiki_0914] [wiki_0915] Trap (computing); on line Interrupt handler; on line [wiki_0916] Interrupt; on line [Zuse_2008] H. Zuse: Konrad Zuses Z3 in Detail; April 2008; on line VŠB-TU Ostrava 124

131 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO 10. Aritmetika v pohyblivé řádové čárce Aritmetika v pohyblivé řádové čárce obsahuje základní matematické operace a funkce. Tyto funkce jsou například, goniometrické funkce, logaritmy, exponenciální funkce, atd. Vstupy těchto operací jsou operandy v interchange formátu pro pohyblivou řádovou čárku a výsledek musí být v kanonickém interchange formátu. K realizaci operací nebo funkcí se k zajištění co nejvyšší přesnosti výsledku používá vlastní formát. Vypočtený výsledek může mít vyšší přesnost, než vyžaduje interchange formát pro pohyblivou řádovou čárku. Zvyšující se počet bitů ve výsledku může být viděn v následujících příkladech. Součet čísel může zvýšit velikost celočíselné části o jeden řád, 1.01 B B = 10.1 B, 9 D + 4 D = 13 D. Násobení má maximální velikost výsledku, když sečteme počet číslic obou operandů, 1.01 B * 1.01 B = B nebo i v desítkové soustavě 8 D * 16 D = 128 D. Tyto zásady jsou platné pro všechny číselné soustavy. Proto při výpočtu nutno počítat s dodatečnými bity v celočíselné části výsledku. Nicméně se očekává, že výsledek bude v kanonickém interchange formátu. Po každém provedení aritmetické operace v pohyblivé řádové čárce, je nutné provést normalizaci, zaokrouhlení a nastavení výjimek. Normalizace je úprava čísla do kanonického binárního interchange formátu. Standard IEEE definuje normalizovanou nebo subnormální formu significandu v binárním interchange formátu. Obě formy používají significand ve vědeckém zápisu. Hodnoty těchto forem jsou definovány pomocí formulí (1001) a (1002). Kanonický formát je formát definovaný v IEEE 754. Dodatečné bit celočíselné části výsledku. Normalizace binárním formátu. v = ( 1) S (1 + v = ( 1) S (0 + T 2 p 1) 2e (1001) T 2 p 1) 2emin (1002) v = ( 1) S C 10 q (1003) Kde v je konečná hodnota čísla v pohyblivé řádové čárce; S je znaménko; T je hodnota v poli T, je to celočíselná hodnota bez znaménka a p je přesnost; 1/2 p-1 je měřítko, kde p je přesnost; C je significand v dekadickém formátu ve tvaru koeficientu; e je exponent v binárním formátu a je roven E bias; q je quantum, exponent v dekadickém formátu a je roven E bias; E je celočíselná hodnota bez znaménka posunutého exponentu; bias je posun (offset) představuje binární posuv; emin je minimální hodnota exponentu a je rovna emax 1. VŠB-TU Ostrava 125

132 10. Aritmetika v pohyblivé řádové čárce Poznámka o normalizované a subnormální formě Normalizovaná forma má vedoucí (leading) bit significandu rovný 1, např. 1,0001 * 2 3. Subnormální forma má (leading) bit significandu rovný 0 a exponent e se rovná emin. Příklad subnormálního čísla ve formátu binary32 je 0,001 * Dekadický interchange formát v pohyblivé řádové čárce má hodnoty, které jsou definované vzorcem (1003). Significand je koeficient, což je dekadické číslo bez znaménka nebo binární číslo bez znaménka. Significand v dekadickém interchange formátu preferuje jen určité formy, obr Pokud je počet platných číslic menší než přesnost p, pak existuje více preferovaných forem. Výběr formy je dán typem operace a standard IEEE tyto situace specifikuje detailně. Když je počet číslic roven přesnosti p, číslo zůstává beze změn. V případě, že počet platných číslic je vyšší, než přesnost p, pak je zde jen jedna preferovaná forma. Číslo musí být zaokrouhlena na p číslic pomocí zvětšení exponentu. [Internet_1001]. Preferovaná forma v dekadickém formátu. Číslo 1234 * * * 10 0 Significand, kde p = * * * * * * 10-3 Obr Preferovaný significand pro dekadický formát s předností p = 7 Po normalizaci či stanovení preferované formy je provedeno zaokrouhlení a nastavení výjimek. Ne všechny bity vypočteného výsledku jsou potřebné pro tyto úpravy. Z tohoto důvodu je vypočtený výsledek upraven na tvar, kde significand má p bitů nebo p číslic a pomocné bity nebo číslice. Pomocné bity jsou: guard bit, round bit a sticky bit, [Koren_2008] a pomocný bit v celočíselné části výsledku. V literatuře je možné najít různé názvy těchto bitů a jejich význam. Dodatečný bit v celočíselné části výsledky se používá u normalizace binárních dat v pohyblivé řádové čárce tak, že výsledek je posunut doprava. Tento bit je významný pouze tehdy, když celočíselná část výsledku může mít 2 bity. Po tomto posunu, je bitům guard, round a sticky přiřazena nová hodnota. Guard bit je významný pro binární formát v pohyblivé řádové čárce a pro normalizaci. Guard bit je bit na pozici p v significandu, tzn. d p. Některé výsledky operací mohou mít celočíselnou část výsledku rovnu nule. V tomto případě se provádí normalizace jako logický posun doleva. Po této normalizace guard bit není zapotřebí a zůstanou jen round a sticky bity. Když normalizace není nutná, guard bit se odstraní a round a sticky bity jsou posunuty doleva o jednu pozici. V případě sticky bitu se vypočítá nová hodnota. Více informací naleznete v literatuře [wiki_1001], [Muller_2010] a [Koren_2008]. Dodatečné bity. Guard bit. VŠB-TU Ostrava 126

133 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Round bit nebo round číslice se používají pro zaokrouhlování, [wiki_1001] a [Koren_2008]. Na začátku závěrečných operací, u binárního čísla round bit následuje po bitu guard. U dekadických čísel, round číslice je umístěna na pozici p+1 od vedoucí (leading) číslici. Sticky bit používá pro zaokrouhlování a je jej nutno vypočítat. Sticky bit je umístěn za round bitem. Sticky bit je vždy logické OR zbývajících nejméně významných bitů výsledku za round bitem, [wiki_1001] a [Koren_2008]. Sticky bit určuje, zda je výsledek přesně uprostřed ulp (unit in the last place - jednotka na posledním místě) nebo ne. Když sticky bit je roven nule, výsledek je ve středu ulp, a pokud je tento bit nenulový, znamená to, že výsledek je mimo střed ulp. Jedná se o situaci je kdy, například číslo má byt zaokrouhleno k nejbližšímu celému číslu. Toto číslo se nachází ve středu ulp, potom je možné zaokrouhlení dolů je na 2 nebo zaokrouhlení směrem nahoru, na hodnotu 3. Ale číslo 2, má již sticky bit roven jedné, a pak nejbližší číslo je 3. Round bit. Sticky bit. Vypočítaný výsledek Přesnost p Logical OR Dodatečné integer bity MSB LSB 0 p-1 Significand G R S G - Guard bit R - Round bit S - Sticky bit Obr Pomocné bity v binárním formátu, guard, round a sticky bit Všechny tyto bity jsou používány v binární aritmetice v pohyblivé řádové čárce, kde se používá vědecká forma significandu a výsledky mají více bitů, než je přesnost p. Guard a round bity jsou vytvořeny jednoduše přidáním názvů bitům ve správné pozici. Sticky bit se vypočte pomocí operace logického OR zbývajících bitů, obr Dekadická pohyblivá řádová čárka se používá preferované formy. Když je počet číslic ve výsledku vyšší než přesnost p, potom se aplikuje zaokrouhlení na p leading číslic Zaokrouhlování Zaokrouhlení zajišťuje, že výsledek v kanonické formě pohyblivé řádové čárky je nejpřesnější. Více informací o zaokrouhlování je v jedné z předchozích kapitol. Standard IEEE stavuje 5 principů zaokrouhlování. Zaokrouhlení k nejbližší hodnotě jsou: Zaokrouhlení nejblíže k sudé. Zaokrouhlení pryč od nuly. Směrová zaokrouhlení jsou: Zaokrouhlení směrem k nule. Zaokrouhlení směrem plus nekonečnu. Zaokrouhlení nejblíže a k sudé je výchozím (default) zaokrouhlováním. VŠB-TU Ostrava 127

134 Zaokrouhlení směrem mínus nekonečnu. 10. Aritmetika v pohyblivé řádové čárce V počítačích je zaokrouhlení často prováděno přičtením konstanty k zaokrouhlenému číslu. Pro tento účel, je definován termín ulp, obr Termín ulp je zkratka pro unit in the last place, jednotku na posledním místě nebo pro jednotku nejmenší přesnosti, [wiki_1004]. V literatuře jsou uvedeny další definice, [Harrison_1999], [Muller_2005] a [Muller_2010]. Pro zaokrouhlování, postačí definice, která říká, že ulp je prostor mezi nejbližšími čísly v pohyblivé řádové čárce, ke kterým se zaokrouhluje, [wiki_1001]. ulp - unit in the last place. Sousední čísla v pohyblivé řádové čárce s přesností p ulp Reálná číselná osa FP data uprostřed ulp ½ ulp ½ ulp Obr Definice ulp Vzorec (1004) definuje ulp pro binární formát, kde je significand vyjádřen ve vědecké formě a vzorec (1005) definuje ulp pro dekadický formát, kde je significand vyjádřen ve tvaru koeficientu. Všechny dekadické formáty mají stejný significand ve vztahu na rozdíl od binární definice. Kde Binárně, ulp = 1/2 p-1 * 2 e (1004) Dekadicky, ulp = 1 * 10 q (1005) p je přesnost ve formátu pohyblivé řádové čárky; e je exponent; q quantum. Zaokrouhlení způsobuje chyby. První chyba je, že výsledek ztrácí bity, a tím přesnost výsledku. Další chyby zaokrouhlování jsou způsobeny aplikací asociativního a distributivního zákona ve výpočtu a také počtem zaokrouhlování. Obr ukazuje příklad dekadického výpočtu s přesností p = 7. Při aplikaci asociativního zákonu na součet všech tří operandů a, b, c a zokrouhlením po každém součtu dvou operandů, generuje odlišné výsledky. Zokrouhlení je provedeno pravidlem k nejbližší hodnotě, [wiki_1005]. Poznámka k hodnotě ulp a ½ ulp Formát binary32 má přesnost p = 24, pak ulp = 1/2 p-1 * 2 e = B * 2 e = H * 2 e. ½ ulp = B * 2 e = H * 2 e. Všechny dekadické formáty má significand stejnou hodnotu ulp = 1 * 10 q and ½ ulp = 0.5 * 10 q. VŠB-TU Ostrava 128

135 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO a = * 10-4 b = * 10-5 c = * 10-6 a = b = c = a+b+c a+b a+c b+c round round round plus c plus b plus a round round round round Obr Možnosti chyb při zaokrouhlování Aplikace jednoho zaokrouhlování namísto dvou také generuje opět rozdílný výsledek, obr Tyto potíže se zaokrouhlováním jsou známé a jsou detailně popsány v literatuře [wiki_1002], [wiki_1003] a [Muller_2010]. Tyto problémy se týkají MAC (Multiply ACcumulate operations). Což představuje operace se třemi nebo více operandy na vstupu. Takovouto typickou operací je FMA (Fused Multiply-Add) nebo operace FMAC (Fused Multiply Accumulate), [wiki_1002]. Operace FMA je definována jako as a a*b + c a je často používána v digitálním zpracování signálů. Zaokrouhlování se provádí přičtením jedné z hodnot 0, ½ ulp nebo ulp k výsledku. Přičtení může změnit všechny číslice significandu, protože je generován přenos (carry) mezi číslicemi, [Koren_2008]. Proto po zaokrouhlení je nutné zkontrolovat správnost interchange formátu a nastavit výjimku. Obr ukazuje tabulku pro binární zaokrouhlování k nejbližší sudé, kde zaokrouhlení závisí na LSB bitu significand, round a sticky bitu, [Koren_2008]. Na obr je tabulka směrového zaokrouhlování pro binární formát, kdy zaokrouhlení závisí na znaménku significandu, round a sticky bitu, [Koren_2008]. MAC operace. Zaokrouhlování je přičtení 0, ½ ulp nebo ulp. LSB R S Operace Poznámka ½ ulp 1 na pozici p ½ ulp 1 na pozici p ½ ulp 1 na pozici p Obr Zaokrouhlování nejbližší a k sudé Znaménko k nule k + k - Operace pro směrové zaokrouhlení R S ulp ulp ulp ulp ulp ulp Obr Schéma směrového zaokrouhlování Poznámka VŠB-TU Ostrava 129

136 10. Aritmetika v pohyblivé řádové čárce 10.2 Výjimka Výjimky (exceptions) charakterizují výsledek operace v pohyblivé řádové čárce, [Muller_2010] a [IEEE ]. Praktická realizace používá více výjimek, než definuje standard IEEE První nastavení výjimek je provedeno pomocí operace nebo funkce. Druhé nastavení se provádí normalizací a zaokrouhlováním. Více informací najdete v předchozí kapitole. Podle standardu IEEE existují tyto základní výjimky: Výjimky - exceptions. Invalid operation - neplatná operace. Division by zero - dělení nulou. Overflow - přetečení. Underflow - podtečení. Rounding - nepřesnost. Normalizace a zaokrouhlování mohou způsobit přetečení nebo podtečení. Normalizace je posun doleva či doprava s opravou exponentu a zaokrouhlení je přičtení. Výsledek obou operací může být mimo rozsah zobrazení. Zaokrouhlování vždy nastaví výjimku na Nepřesnost Závěrečné operace Vypočtený výsledek nemusí odpovídat kanonickému interchange formátu v pohyblivé řádové čárce. Proto normalizace, zaokrouhlování a nastavení výjimek jsou prováděny na vypočteném výsledku. Tyto operace používají guard, round a sticky bity. Poslední kroky po každé operaci jsou, [Mudawar_2014]: Závěrečné operace. Post-normalizace, výsledek se upraví na normalizovanou formu posunutím significandu s opravou exponentu. V některých případech se používá guard bit. Kontrola - nastavení výjimek. Zaokrouhlení. Výsledek post-normalizace je zaokrouhlen. Standard 754 definuje možnosti zaokrouhlení. Standardní způsob zaokrouhlování je zaokrouhlení nejbližší a k sudé. Návrat k prvnímu kroku, dokud výsledek a výjimky se nezmění. Dekadicky x x Posuvy a úprava exponentu x x Binárně x x x x Obr Principy úpravy exponentu, když je číslo posunuto VŠB-TU Ostrava 130

137 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Normalizace nebo vytvoření preferovaného significandu je realizováno posunutím s opravou exponentu. Obr ukazuje základní principy normalizace. Základní principy normalizace jsou: Když je číslo posunuto vpravo, exponent je zvýšen o jedničku za každou pozici. Když je číslo posunuto vlevo, exponent je snížen o jedničku za každou pozici. G R S Sticky bit je logická operace OR již z dříve vypočtených bitů, pokud existují. OR G - Guard bit R - Round bit S - Sticky bit To je výsledek výpočtu s vyznačením guard, round a sticky bit. Práce s guard, round a sticky bity Normalizace pomocí posuvu doprava, po které guard bit zaniká bez náhrady. Nový round bit a nový sticky bit je vypočten. OR Pozice round bitu je posunuta o jedno místo doleva a nový sticky bit je logická operace OR zbývajících bitů Zaokrouhlování k nejbližší a k sudé znamená přičíst k danému číslu 1/2ulp. To je 1 v pozici round bitu. Obr Posuvy a výpočty round a sticky bitů Příklad konečných operací v binárním formátu je na obr Přesnost p je 4 bity. Výsledek má 2 bity v celočíselné části a ve výsledku jsou vyznačeny guard, round a sticky bity. První operací nenormalizovaného čísla je logický posun vpravo. Guard bit zaniká, protože ho není potřeba. Round bit má získá novou hodnotu posunutím. Nová hodnota sticky bitu je výsledkem logické operace OR z předcházejících hodnot round a sticky bitů. Dalším krokem je zaokrouhlení. Výsledek je kladný a leží v horní polovině ulp. Obr obsahuje pravidla pro zaokrouhlování k nejbližší a k sudé. LSB, round a sticky bity jsou rovny 1, proto se k výsledku přičte 1/2 ulp. Po těchto operacích, pomocné bity ztrácejí svou funkci Formát minifloat v pohyblivé řádové čárce Následující text se zabývá základními matematickými operacemi. Pro lepší pochopení příkladů v pohyblivé řádové čárce je použit minifloat formát interchange formátu, obr Krátká definice formátu minifloat je: Binární číslicový systém, B = 2. Velikost slova k je 8 bitů. To značí je používán byte. Přesnost p je 4. Minifloat formát. VŠB-TU Ostrava 131

138 10. Aritmetika v pohyblivé řádové čárce pro 8 bitů, p = 4 Sign S E E E Biased exponent E T T T Trailing Bias je b=7, emax je +7 a emin je -6. Přesnost je p = 4, pole T má 3 bity a MSB bit u significandu je skrytý x 2-6 Kladná číselná osa T = 0 T x x x 2 +7 Subnormal Normal E = 0x0 E je v rozsahu od 1 do 0xE Infinity E = 0xF NaN E = 0xF Obr Definice minifloat Exponent. Posunutý exponent má 4 bity. Posunutí bias je rovno 7, maximální exponent emax je 7, minimální exponent emin je -6, (emin = 1 - emax). NaN. Posunutý exponent E je roven 0xF a pole T je nenulové. Nekonečno. Posunutý exponent E je roven 0xF a pole T je nulové. Normalizovaná forma konečných čísel. MSB bit je 1 a je to skrytý bit. Posunutý exponent E je v rozsahu od 1 do 0xE. Pak exponent e je v rozsahu od -6 do +7. Subnormální forma konečných čísel. MSB bit je 0 a je to skrytý bit. Posunutý exponent E je roven 0x0, exponent e je -6. Sčítání * * 10-2 ve formátu decimal * * R S Exponenty se sjednocují podle nejmenšího z nich. U sčítání nejsou exponenty zapotřebí. Significand je chápán jako celé číslo a desetinná tečka není zapotřebí. Součet má 8 číslic a požadovaná přesnost je 7 číslic. Je použit formát Decimal32. Exponent musí být zvýšen. Round bit a sticky bity jsou vyznačeny. Sticky bit je nula. Součet decimálních čísel. G - Guard bit R - Round bit S - Sticky bit Zaokrouhlování nejbližší a k sudé. Číslo leží uprostřed ulp. Bez přičtení * 10-1 Výsledek s exponentem. Exponent byl zvýšen. Obr Dekadické sčítání VŠB-TU Ostrava 132

139 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO 10.5 Sčítání a odčítání Provádění operace sčítání a odčítání má základní podmínku, a to, že exponenty pohyblivé řádové čárky musí být stejné. Proto exponenty musí být sjednoceny před sčítáním nebo odčítáním. Pro binární pohyblivou řádovou čárku, menší exponent je zvýšen na vyšší exponent posunutím significandu, [Koren_2008]. To znamená, že significand je posunut doprava a exponent je zvýšen. Pro dekadickou pohyblivou řádovou čárku, je lepší snížit vyšší exponent na menší. Potom se vykoná operace součtu či rozdílu a na konci je provedena normalizace, zaokrouhlení a nastavení výjimek. Velikost výsledku závisí na rozdílu exponentů operandu; a proto součet může mít více bitů nebo číslic, než operandy. Obr a obr představují příklady pro sčítání a odčítání * * Odčítání * * 2-2 v minifloatu G R S Pro sjednocení exponentů je použit vlastní formát. Desetinná tečka není zapotřebí. Následující výpočet je proveden s celými čísly a je použita pevná řádová čárka. Je nezbytné vyměnit druhý operand za dvojkový doplněk. Dva bity jsou přidány jako leading bity, jeden je určen pro znaménko a druhý pro zvýšenou velikost součtu. Poté je sčítání vypočteno. V případě záporného výsledku, je použit dvojkový doplněk. Znaménko výsledku je mínus. Guard bit, round bit a sticky bit jsou označeny. Round a sticky bity jsou nulové. Rozdíl v minifloat formátu. G - Guard bit R - Round bit S - Sticky bit * 2-3 Je aplikována normalizace. Significand je posunut doleva, a exponent je snížen. Zaokrouhlení k nejbližší a k sudé je aplikováno. Bez přičtení. Výsledek s exponentem. Obr Odčítání Matematická definice sčítání a odčítání je dána vzorci (1006) a (1007). V obou vzorcích, se předpokládá konečná hodnota dat v pohyblivé řádové čárce. Operace s nekonečnem a NaN jsou popsány podrobně v [IEEE ]. sum = (± m1 x 2 E1 ) + (± m2 x 2 E2 ) = (± m1 x 2 E1 ) + (± m3 x 2 E2 + (E1-E2) ) dif = (± m1 x 2 E1 ) - (± m2 x 2 E2 ) = (± m1 x 2 E1 ) - (± m3 x 2 E2 + (E1-E2) ) = = (±m1) + (±m3) x 2 E1 (1006) (±m1) - (±m3) x 2 E1 (1007) VŠB-TU Ostrava 133

140 10. Aritmetika v pohyblivé řádové čárce Kde Obě čísla v pohyblivé řádové čárce jsou racionální čísla. sum je výsledek sčítání. dif je výsledek odčítání. m1, m2 jsou significandy. m3 je posunutý significand se sjednoceným posunutým exponentem, (E1 = E2+(E1- E2)). E1 je posunutý exponent, který je větší než E2. E2 je posunutý exponent, který je menší nebo roven E1. E2 + (E1-E2) je posunutý exponent, který je roven E1. Hardwarová realizace sčítání a odčítání v pohyblivé řádové čárce má dvě části. První část se zabývá exponenty a druhá se zabývá sčítáním a odčítáním significandů. Pro sčítání a odčítání celých čísel v pohyblivé řádové čárce se používá binární sčítání a dvojkový doplněk. Popis realizace je uveden detailněji např. v literatuře [Mul-ler_2010], [Koren_2008] a [Ergovac_Lang_2004]. Násobení (-1.11 * 2-5 ) * (+1.1 * 2 +3 ) v minifloat formátu ( * 2-5 ) *( * 2 +3 ) 1110 * Znaménko výsledku je mínus. Exponent výsledku je -2. Násobení celých čísel, kde operandy mají měřítko 1/2 3. Výsledek má měřítko 1/2 6. Normalizace je aplikována. Significand je posunut doprava a exponent je zvýšen. Násobení v minifloat formátu * 2-1 Round bit a sticky bit jsou vyznačeny. Sticky bit je operace logického OR zbývajících bitů. Zaokrouhlení nejblíže a k sudé je aplikováno. Bez přičtení. Výsledek s exponentem. Exponent byl zvýšen. Obr Binární násobení G - Guard bit R - Round bit S - Sticky bit 10.6 Násobení Násobení dvou čísel v pohyblivé řádové čárce má více částí. První z nich je oddělený výpočet výsledného znaménka. Na bitové úrovni, je to provedeno pomocí logické operace XOR. Druhá část je oddělený výpočet exponentu ve výsledku, což je součet obou exponentů. Dalším kro- Násobení. VŠB-TU Ostrava 134

141 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO kem je samotné vynásobení significandů. Jsou zde použity principy pevné řádové čárky a použije se binární násobení celých čísel. Operandy jsou v měřítku 1/2 (p-1), pak výsledek je v měřítku 1/2 2(p-1). Měřítka výsledku určuje polohu radix tečky. Další kroky jsou normalizace, zaokrouhlování a nastavení výjimky. Obr a obr ukazují příklady násobení v binární a dekadické číselné soustavě. Násobení (+123 * ) * (-456 * 2 +9 ) ve formátu decimal32 (+123 * ) *(-456 * ) * 789 Násobení Znaménko výsledku je minus. Exponent výsledku je -6. Násobení v dekadickém formátu Výsledek má 8 číslic, požadavek přesnosti je p = 7. Výsledek je posunut doprava, exponent se inkrementuje Round a sticky bity jsou odvozeny z původního výsledku Zaokrouhlení k nejbližší a sudé značí přičtení ulp G - Guard bit R - Round bit S - Sticky bit * 10-5 Výsledek s exponentem. Exponent byl zvýšen. Obr Dekadické násobení Násobení čísel v pohyblivé řádové čárce je definováno matematickým vzorcem (1008), kde data jsou konečné hodnoty. Když je operand roven nekonečnu nebo NaN, pak násobení je popsáno v [IEEE ]. Výsledek m1*m2 má velikost číslice 2p, kde p je přesnost. product = ((-1) S1 m1 x 2 E1 ) * ((-1) S2 m2 x 2 E2 ) = (-1) (S1 xor S2) (m1*m2) x 2 (E1+E2) (1008) Kde product je výsledek násobení. S1, S2 jsou znaménka. m1 and m2 jsou significandy. E1 and E2 jsou posunuté exponenty. xor je logická operace xor. Hardwarová realizace binárního násobení může být pomocí kombinačního logického obvodu, který obsahuje p-1 binární sčítaček. Pro formát binary64, kde přesnost p = 54, násobič má 53 binárních sčítaček s postupným přenosem (ripple carry adder), každá o 54 bitech v kaskádním VŠB-TU Ostrava 135

142 10. Aritmetika v pohyblivé řádové čárce zapojení. Takováto realizace má však velké zpoždění při výkonu násobení a proto jsou upřednostňovány návrhy binární násobičky s malým zpožděním, které jsou popsán v literatuře [Muller_2010], [Koren_2008] a [Ergovac_Lang_2004] Dělení Dělení v pohyblivé řádové čárce je definováno matematickým vzorcem (1009), kde oba operandy jsou konečné hodnoty. Dělení nulou, nekonečnem nebo NaN je detailně popsáno v [IEEE ]. Dělení. quotient = ((-1) S1 m1 x 2 E1 ) / ((-1) S2 m2 x 2 E2 ) = (-1) (S1 xor S2) (m1/m2) x 2 (E1-E2) (1009) Kde quotient je výsledek dělení. S1, S2 jsou znaménka. m1 a m2 jsou significandy. E1 a E2 jsou posunuté exponenty. xor je logická operace xor. Dělení v pohyblivé řádové čárce má pouze podíl, ne zbytek. Algoritmy dělení v pohyblivé řádové čárce jsou podrobně popsány v literatuře [Muller_2010], [Koren_2008], [Ergovac_Lang_2004] a [wiki_1007]. Hardwarová realizace dělení v pohyblivé řádové čárce je pomocí digitálního synchronního systému, který obsahuje automat s konečným počtem stavů FSM (Finite State Machine), ve které je implementován algoritmus dělení. Dělení je považováno za nejpomalejší operaci v počítači Reference [EETimes_1001] Clive Maxfield: Design How-To, An introduction to different rounding algorithms; EETimes 1/4/2006, on line [Ergovac_Lang_2004] Milos D. Ercegovac, Tomas Lang: Digital Arithmetic; Morgan Kaufmann Publishers, 2004, ISBN [IEEE ] IEEE Std , IEEE Standard for Interchange-Point Arithmetic, 29 August 2008, revision of IEEE [Internet_1001] Decimal Arithmetic Specification, Arithmetic operations, material of IBM, on line [Harrison_1999] John Harrison; A machine-checked theory of floating point arithmetic; Proceedings of the 1999 International Conference on Theorem Proving in Higher Order Logics, Nice, France, 1999, TPHOLs'99. Springer LNCS 1690, pp , 1999; on line VŠB-TU Ostrava 136

143 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO [Maxfield_2005] Clive MAX Maxfield, Alvin Brown: How Computers Do Math; Wiley Interscience, A John Wiley & Sons, INC., publication, 2005, ISBN [Muller_2005] Jean-Michel Muller: On the definition of ulp (x); ACM Transactions on Mathematical Software, Vol. V, No. N, November 2005; on line [Muller_2010] Jean-Michel Muller, Nicolas Brisebarre, Florent de Dinechin, Claude-Pierre Jeannerod, Vincent Lef`evre, Guillaume Melquiond, Nathalie Revol, Damien Stehl e, Serge Torres: Handbook of Interchange-Point Arithmetic; Birkhauser Boston, a part of Springer Science+Business Media, LLC 2010; ISBN ; e-isbn [Koren_2008] Israel Koren: Computer Arithmetic Algorithms; A. K. Peters 2008; ISBN [Mudawar_2014] Muhamed Mudawar: Floating point; presentation for subject Computer architecture; King Fahd University of Petroleum and Minerals; on line [RFC 0382] MATHEMATICAL SOFTWARE ON THE ARPA NETWORK; 1972; on line [wiki_1001] [wiki_1002] [wiki_1003] [wiki_1004] Floating point; on line Multiply accumulate operation; on line Accuracy problems; on line Unit in the last place; on line [wiki_1005] Rounding; on line [wiki_1006] [wiki_1007] IEEE floating point; on line Division algorithm; on line [Zdralek_2014] Jaroslav Zdralek, Zdenka Chmelikova: Introduction to Digital Systems for Joint Teaching Programme of BUT and VSB-TUO; VSB Ostrava 2014; ISBN VŠB-TU Ostrava 137

144 11. Znaky a Unicode 11. Znaky a Unicode Na začátku komunikace založené na principech elektřiny, byl text převeden sled elektrických impulsů a každé písmeno abecedy bylo definovánoa posloupností tžěchto impulsů. Prvním nejvíce rozšířeným kódem byla Morseova abeceda, která se používala k přenosu textu, [wiki_1101]. Následující důležitý kód byl 5-bitový kód, který byl použit v telexu (teletype machine) pro přenos textu, [wiki_1102], [wiki_1133]. Ekvivalentí název telexu je dálnopis. A v roce 1960, byl definován a standardizován ASCII kód. Jedná se o důležitý milník v historii kódování znaků. Kód ASCII se používá dodnes při komunikaci a v počítačích. Původní ASCII kód obsahuje pouze americkou abecedu. Později, kdy byly zavedeny osobní počítače, byl ASCII kód upraven přidáním národních abeced. V současné době je jeho nástupcem Unicode. Současné textu na monitoru nemá jen textovou informaci, ale i grafický význam a své vlastnosti. Tento text může být různě barevný a psán různými fonty, různým písmem a mohou být použity další funkce. Zobrazení textu není jen technickou záležitostí, ale spíše grafický návrhem, který pochází z tiskařského průmyslu. V dnešní době počítačů se některé termíny z polygrafického průmyslu změnily, nebo mají nový význam Terminologie Typografie je předchůdcem dnešního zobrazování informací v počítači. V oblasti informačních technologií, je používána nová terminologie popř. staré pojmy nabývají nového významu. V dalším textu jsou upřednostňovány pojmy a významy vycházející z Unicode. ASCII American Standard Code for Information Interchange. ASCII kód (7-bit) Stránka 437 Unicode pozice Textová definice Název podle Unicode Základní glyf Další možnosti glyfů x61 x61 U+0061 LATIN SMALL LETTER A a a, a, a, a, a, a, x39 x39 U+0039 DIGIT NINE 9 9, 9, 9, 9, 9 x07 x07 U+0007 BELL, control character x0a x0a U+000A LINE FEED (LF), control character xbc U+255C BOX DRAWINGS UP DOUBLE AND LEFT SINGLE xac U+00BC VULGAR FRACTION ONE QUARTER ¼ ¼, ¼, ¼, ¼, Obr Znaky a jejich definice a kódování Znak je termín, který změnil svůj význam. V oblasti informačních technologií, to je základní informace, jednotka, která odpovídá symbolu, který má typicky fonetický nebo piktografický význam. Může to být latinské písmo, čínský Sonogram (písmeno), číslice, interpunkce anebo VŠB-TU Ostrava 138

145 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO dingbat, atd. Znak může mít i řídicí význam, např. při tisku, jako je například nový řádek, tabulátor, atd. Někdy jsou tyto znaky označovány jako formátovací znaky. Více informací naleznete v literatuře [Interent_1102], [wiki_1103] a [wiki_1104]. Ukázky znaků, jejich definice a kódování jsou na obr Unicode definuje znak pomocí 4 vět, [Unicode_1101]: Znak je nejmenší komponent psaného jazyka, který má sémantickou hodnotu; odkazuje na abstraktní význam nebo tvar, raději než na konkrétní tvar (viz také glyf), nicméně pro pochopení čtenáře je v kódových tabulkách nezbytná nějaká forma vizuálního zobrazení. Synonymum pro abstraktní znak. Základní jednotka pro kódování znaků v Unicode. Anglický název pro ideografické písemné prvky čínského původu. Znak. Poznámka ke znaku Znak má svůj název a základní glyf. Nenese žádnou informaci o vlastnostech, například typ písma, barvě, velikosti, atd. Glyf je způsob, zobrazení znak. Glyf definuje tvar znaků, viz literatura [Internet_1101], [Unicode_1102] a [wiki_1105]. Rozdíl mezi znakem a symbolem je znázorněn na obr a obr , [Unicode_1103]. Jeden znak může mít jeden nebo více glyfů a naopak. Znak a glyf. Znak Další možnosti glyfů Poznámka a a, a, a, a, a, a Jeden znak a více glyfů 9 9, 9, 9, 9, 9 Jeden znak a více glyfů (c) Více znaků převedeno do jednoho glyfu Pts Více znaků převedeno do jednoho glyfu à ~a Jeden znak a dva glyfy Obr Znaky a glyfy Kódování znaků; to je přiřazení jednoho prvku z kódovacího systému. Znak může být zakódován číslem, sledem elektrických pulsů nebo příznaků a tak dále. Kódování znaků v počítači znamená přiřazení čísla, které se nazývá kód znaku. Pak každý znak je definován svým kódem, textovou definicí a základní glyfem, [wiki_1106] a [Unicode_1104]. Kódování znaků. [Wiki_1135] definuje kódování znaků takto: "počítače a komunikační zařízení zobrazují znaky pomocí kódování znaků, které přiřazuje jednotlivé znaky k něčemu, co typicky představuje sekvenci bitů, které mohou být uložené nebo přenášené po síti. Sada znaků je množina znaků a jejich kódovací schéma, které se používá pro zobrazení informací. Sada znaků ASCII je velmi známa; další sadou je například Unicode, [Unicode_1105]. Některá literatura nedělá rozdíly mezi kódováním znaků a sadou znaků. Font je soubor glyfů, které se používají pro vizuální ztvárnění znaku. Font je často spojován se sadou parametrů (například velikost, sklon, tloušťka písma, atd.), které při nastavení na konkrétní hodnoty, budou generovat soubor zobrazitelných glyfů, [Unicode_1106]. Wikipedie definuje počítačový font jako soubor, který má sadu glyfů, [wiki_1107]. Sada znaků. Font je soubor, který definuje glyfy pro znaky. VŠB-TU Ostrava 139

146 11. Znaky a Unicode Skript je soubor písmen a jiných psaných znamének nebo diakritik, které se používají k zobrazení textové informace v jednom nebo více textových systémech (jazycích)", [Unicode_1107]. Například český skript je definován českou abecedou, německý skript je definován německou abecedou a tak dále. To znamená, že všechny tyto národní skripty jsou podmnožiny jednoho skriptu latinka. To znamená, že latinský skript obsahuje definici všech národních písmen v jazycích, kde latinka je základem. Totéž platí pro skript v azbuce (Cyrillic script), který je základem pro ruský skript, ukrajinský, atd. Některé země mají více skriptů, například japonský systém používá několik skriptů, [Unicode_1107]. Typeface řez písma, [wiki_1108], v typografii, to znamená více fontů, kde všechny glyfy znaků mají stejné vlastnosti, znaménka nebo sklon. Jinými slovy, řez písma definuje společné typografické vlastnosti, které jsou sdíleny všemi fonty se stejným řezem písma. Proto více fontů má typické řezy písma a každý typ řezu písma má své jméno. Mezi nejznámější patří Serif, Sans Serif (také známý jako gothic), handwriting, calligraphy, console a další. Příklady písem jsou na obr Skript. Serif, San Serif, handwriting, Console. Text Řez písma Font The quick brown fox jumps over the lazy dog Serif Times New Roman The quick brown fox jumps over the lazy dog San Serif Arial The quick brown fox jumps over the lazy dog Handwriting Blackadder ITC The quick brown fox jumps over the lazy dog Console Consolas The quick brown fox jumps over the lazy dog Calligraphy Lucida calligraphy Obr Řez písma Každý font má čtyři základní typy řezy písma, normální, šikmé nebo kurzívu (italic), tučné (bold) a kombinaci tučná kurziva (italic-bold), obr Tyto řezy písma jsou historické, a tyto řezy písma jsou přiřazena každému fontu i v dnešní době počítačů. Řezy písma jsou definované jako samostatné soubory, nebo matematicky, pomocí vektorových písem. Definice těchto řezů písmen jako samostatná soubor je upřednostňována z důvodu dosažení vyšší kvality zobrazení glyfů. Text Řez písmo Font The quick brown fox jumps over the lazy dog Normal Calibri The quick brown fox jumps over the lazy dog Italic or cursive Calibri The quick brown fox jumps over the lazy dog Bold Calibri The quick brown fox jumps over the lazy dog Italic-Bold Calibri Italic a bold. Obr Písma v každém fontu Proporcionální a neproporcionální písmo je základním rysem každého písma, [wiki_1108]. Obr ukazuje rozdíl mezi těmito dvěma formáty. Proporcionální písmo znamená, že každé písmeno má jinou šířku a neproporcionální, že každé písmeno má konstantní šířku. Ostatní termíny pro neproporcionální písmo jsou monospaced, fixed space a console typeface. Proporcionální a neproporcionální. VŠB-TU Ostrava 140

147 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Text imlw imlw Písmo Proporcionální Neproporcionální nebo monospaced nebo console Obr Šířka glyfů Knihtisk patří k nejstarším technologiím tisku v tiskařském průmyslu, od kterého je dnes upuštěno, [wiki_1109] a [wiki_1110]. Tento princip je použit v klasickém psacím stroji, obr , kde je text vytvářen otlačením matrice na papír. Tato technologie byla použita na počátku počítačů a dnes se používá sporadicky. Dot je z technického hlediska nejmenší prvek grafiky. Dot je ovladatelný, to znamená, že každý dot má svoji adresu, intenzitu barvy a dalších vlastností. Dot má různé významy podle typu výpočetní techniky. V tiskárně je tečka nejmenší jednobarevný bod, který lze vytisknout. V LCD monitoru je dot tečka odpovídající nejmenšímu jednobarevnému bodu a potom pixel má tři dot - červenou, zelenou a modrou. Monochromatický monitor má pouze dot. Obr Reliéfní tisk v psacím stroji Pixel je nejmenší prvek grafiky, obrazu nebo digitálního umění. Každý pixel je ovladatelný, to znamená, že každý pixel má svou adresu, barvu a ostatní vlastnosti, [wiki_1111]. Pixely jsou používané jako základní elementy v grafickém souboru nebo pro definování vlastností LCD monitorů, skenerů a fotoaparátů. Obr Pixel v grafice DPI (Dot per Inch), tento parametr lze nalézt v popisu tiskárny, kde DPI znamená počet bodů na jeden palec. Parametr DPI je také spojován se skenery. V případě inkoustové tiskárny se používá termín drop namísto dot. PPI (Pixel per Inch), tento parametr lze nalézt ve specifikaci monitorů, fotoaparátů a jako parametr rastrových grafických souborů nebo programů, obr Pixelová grafika, tento termín se vztahuje k definici grafiky v oblasti informačních technologií, kde jsou všechny grafické objekty definované pomocí pixelů, obr VŠB-TU Ostrava 141

148 11. Znaky a Unicode Vektorová grafika. Tento termín se vztahuje k definici grafiky, kde jsou všechny grafické objekty definovány pomocí geometrických elementů, jako jsou body, čáry, křivky, kružnice, a tak dále. Každý geometrický tvar může být barevný a mít další vlastnosti. To znamená, že všechny grafické objekty jsou definovány matematicky jako čáry, vektory, Bezierovy křivky, a tak dále. Princip vektorové grafiky používá řezací plotr. 3D je nejnovější 3-dimenzionální technologie a může být definována pomocí pixelů nebo vektorů. V současné době, 3D zařízení jsou 3D skenery, 3D monitory, 3D fotoaparáty a 3D tiskárny Fonty Font je soubor, který definuje glyfy pro každý znak. První fonty písma byly použity v typografickém průmyslu, kde font je definovaný mechanicky, pomocí reliéfu. V počítačové oblasti, knihtiskový byl použit na začátku tisku v elektrických psacích strojích, řádkových tiskárnách a tiskárnách s typovým kolečkem - kopretinou. S nástupem terminálů nebo monitorů se začaly používat fonty, které byly definovány v souboru. V současné době je možné najít tři hlavní definice fontů, bitmapy a dvě vektorové definice [wiki_1107]. Fonty. Bitmapové fonty se skládají z definice bodů nebo pixelů v matici pro zobrazení každého glyfu. Bitmapový font je také nazýván rastrové písmo. Outline fonty, každý glyf v outline fontu je definován vnějšími křivkami. Vnější obrysy se definují matematicky a k tomu se používají Bézierovy křivky. Outline font je také nazýván jako vektorové písmo. Stroke fonty, tyto fonty používají řadu specifikovaných čar, tvarů a dodatečných informací k definování konečného glyfu. Glyf se potom skládá z několika tvarů. Bitmapový font. Vektorové fonty Bitmapový font Bitmapové fonty jsou také známé jako rastrová písma. Rastrové fonty jsou neproporcionální písma, kde každý glyf má stejnou šířku. Tato šířka je dána, velikostí matice. Velikost matice je definována podle typu zařízení, nebo společnosti. První použitelná velikost matice byla 5 krát 7 bodů a dnes je normální velikost 12 krát 16 bodů. Každý glyf je vykreslen v této matici. Matice 5 krát 7 je vhodná pouze pro velká písmena anglické abecedy, matice dává malý prostor pro interpunkci, malá a velká písmena. V současné době se používají větší matice s větším prostorem pro malá a velká písmena a interpunkci, atd. Mezery mezi glyfy a řádky jsou obvykle definovány v matice. Příklady možných glyfů jsou uvedeny na obr Bitmapový font je také nazýván rastrový font. Obr Příklady rastrových písem a semigrafických symbolů VŠB-TU Ostrava 142

149 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Každý rastrový font má jeden řez písma s určitou výškou glyfů. Je-li požadována jiná výška, pak je vhodné definovat samostatné řez písma pro každou výšku. Různé škálování rastrového písma je problematické a vede k deformaci piktogramů. Každý glyf v matici má další vlastnosti, které definují barvu, intenzitu světla, inverzi, blikání a tak dále. Tyto vlastnosti v textovém terminálu jsou definovány ANSI escape kódy, [wiki_1112]. ANSI escape kódy. Definice rastrového písma je obvykle umístěna do souboru v určitém formátu. Tyto formáty jsou Portable Compiled Format (PCF), Glyph Bitmap Distribution Format (BDF), Server Normal Format (SNF) a další. Rastrová písma byla první písma v počítačové oblasti a jsou používána dodnes v terminálech a v mnoha jehličkových nebo inkoustových tiskárnách jako výchozí písma Outline fonty Outline fonty jsou moderní fonty, kde každý glyf je definován vnějším obrysem. Jde o matematickou definici, kde jsou použity Bezierovy křivky. Některé vlastnosti každého symbolu jsou změněny úpravou parametrů v algoritmu. Modifikace výchozích parametrů Bezierových křivek a barevných vlastností symbolu jsou uvedeny na obr Všechny úpravy byly provedeny matematicky. PostScript je registrovaná ochranná známka Adobe Systems Incorporated. První soubor outline fontů byl určen pro tvorbu tištěného dokumentu pomocí počítače, tzv. DTP (desktop publishing), Obr Principy outline fontu v roce Tento font vytvořila společnost Adobe Systems pod názvem PostScript Type 1. V současné době, PostScript fonty jsou používány v PDF dokumentech. V roce 1980 Apple a Microsoft vytvořili každý svůj vlastní formát s názvem TrueType. Na počátku roku 1990, sada TrueType písem byla poprvé použita v operačních systémech Mac OS a Windows 3. Později, byl společnosti Microsoft navržen formát OpenType jako nástupce TrueType formátu a formát OpenType byl vydán jako standard ISO / IEC : 2009, Information technology Coding of audio-visual objects Part 22: Open Font Format. Více informací naleznete v literatuře [wiki_1113], [wiki_1114] a [wiki_1115]. Hlavní výhodou outline písma je jejich matematická definice a některé vlastnosti glyfů mohou být modifikovány úpravou parametrů v algoritmu. Většina outline fontů jsou proporcionální fonty a jsou používány při zpracování textu a DTP. Některé outline fonty jsou neproporcionální a jsou použity ve specifických případech. Obvykle jsou to emulátory terminálů, zápisy programů v článcích či knihy, prosté textové editory, apod Stroke fonty PostScript je jazyk pro vektorovou grafiku. OpenType je registrovaná ochranná známka Microsoft Corporation. Stroke font je písmo, kde každý glyf je rozdělen do malých prvků. Tyto prvky se nazývají stroke. Potom každý glyf je složen z malých stroke v definovaném pořadí. Každý stroke je popsán matematicky. Proto některé vlastnosti stroke glyfu mohou být upraveny změnou parametrů v algoritmu. Stroke fonty jsou vhodné pro ideogramy (piktogramy) a CJKV symboly. Nejlepším příkladem z literatury je CJKV znak 永 (pinyin: yǒng, "navždy", "trvalost"), obr , [wiki_1116]. Tento glyf se skládá z osmi kaligrafických stroků. Každý stroke má svůj název. Dalšími příklady jsou ideogramy (piktogramy), které se skládají z více piktogramů. Ideogram CJKV je zkratka pro China, Japan, Korea, Vietnam. VŠB-TU Ostrava 143

150 11. Znaky a Unicode "psům vstup zakázán", obr , se skládá ze dvou piktogramů, pes a zákazová značka. Piktogramy mají různé barvy, protože je definováno pořadí, piktogram "psa" kryje piktogram "vstup zakázán", [wiki_1117]. Zdroj: Obr Stroky ve znaku CJKV Zdroj: Obr Stroky v ideogramu 11.6 ASCII American Standard Code for Information Interchange - ASCII je kódovací tabulka znaků, která se používá v počítačích, komunikačních zařízení a dalších zařízení zpracovávajících text. Tato norma byla vytvořena v roce 1960 a jeho poslední modifikace je z roku Původní ASCII je 7 bitové schéma kódování a má dvě části, 33 řídicích znaků a 95 tisknutelných znaků. Tisknutelné znaky jsou malá a velká písmena americké abecedy, číslice a speciální znaky, obr ASCII. LSB MSB A B C D E F 0 NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI 1 DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US 2! " # $ % & ' ( ) * +, -. / : ; < = >? A B C D E F G H I J K L M N O 5 P Q R S T U V W X Y Z [ \ ] ^ _ 6 ` a b c d e f g h i j k l m n o 7 p q r s t u v w x y z { } ~ DEL Obr ASCII kódovací tabulka pro americkou abecedu Nejnovějším standardem pro kódování je Unicode, kde se 7 bitový ASCII kód je první část Unicode, a ta se nazývá blok Basic Latin Unicode. V Unicode, každý znak má své jméno, a proto v následujícím textu, bude použit tento název Unicode a v některých případech bude název Unicode doplněn slangově nebo velmi populárním historickým názvem. Kódy od 0 do 0x1F jsou řídicí kódy, a tato oblast je také nazývána jako řídicí kód C0. Kód 0x7F patří také k řídicím kódům a má význam odstranit (delete). Tyto řídicí kódy byly navrženy pro řízení periferních zařízení počítačů a komunikačních zařízení, a pro řízení toku přenosu. Na obr , je možné vidět způsoby generování těchto kódů jako stříškový zápis (caret Unicode jména. WWW používá UTF-8. VŠB-TU Ostrava 144

151 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO notation) a zápis v programovacím jazyce, zejména jazyka C. Obr ukazuje použité kódy a jejich význam. Kódy v modré barvě jsou často používány. Neuvedené kódy v obrázku mohou být považovány za zastaralé a jejich významy jsou uvedeny v literatuře [wiki_1118]. ASCII code Unicode point Caret notation C language Acronym Unicode name [Unicode_1108] or other name 00 U+0000 ^@ \0 NUL NULL 07 U+0007 ^G \a BEL BELL 08 U+0008 ^H \b BS BACKSPACE 09 U+0009 ^I \t 0A U+000A ^J \n 0B U+000B ^K \v HT LF NL EOL VT CHARACTER TABULA- TION Horizontal Tabulation LINE FEED (LF) New line End of line LINE TABULATION Vertical Tabulation 0C U+000C ^L \f FF FORM FEED 0D U+000D ^M \r CR CARRIAGE RETURN (CR) 1B U+001B ^[ \e ESC ESCAPE Viz popis níže 7F U+007F ^? \? DEL DELETE Vymaž Obr Význam řídicích kódů Description Dnes, je to ukončovací znak řetězce v C jazyku; původně znak NULL měl různé významy. Způsobuje zvuk na zvonku v terminálu. Posouvá kurzor o jednu pozici vlevo. V terminálech maže znak vlevo od kurzoru. Posouvá kurzor horizontálně do následující tab pozice. Původně, posouval kurzor o jeden řádek níž, bez změny sloupce. Více v literatuře [Zdralek_2014]. Posouvá kurzor vertikálně do následující tab pozice. V tiskárnách, nový arch papíru; v terminálech nuluje obrazovku. Původně, posuv kurzoru do prvního sloupce na stejném řádku. Více v literatuře [Zdralek_2014]. Řídicí kódy C0 ESCAPE je používán dvěma způsoby, buď jako klávesa na klávesnici, nebo jako escape sekvence. Po stisknutí klávesy Esc na klávesnici, je odeslán kód 0x1B do operačního systému. Většinou kód ESCAPE způsobí opuštění exit [wiki_1137]. Další možné významy závisí od aplikačních programů. Druhý způsob jsou escape sekvence, což je řada znaků používaných ke změně stavu počítačů při komunikaci a řízení komunikačních periferií. Sekvence ESC začíná ESCAPE kódem, který je následován dalšími kódy, [wiki_1126]. Nejznámější escape kódy jsou Hayes command set, ANSI escape kód a ESC/P. Hayes příkazy tvoří soubor sekvencí, který se používá pro ovládání modemu, [wiki_1138]. Tyto sekvence mohou provádět akce, jako je vytáčení telefonního čísla, odpovídání na telefon, nastavení parametrů přenosu, a tak dále. VŠB-TU Ostrava 145

152 11. Znaky a Unicode ANSI escape kód nebo ANSI escape sekvence je způsob ovládání textových terminálů, [wiki_1112]. Tato sekvence může měnit vlastnosti jednotlivých glyfů nebo celého textu, nebo vlastnosti obrazovky. Tyto ANSI escape sekvence jsou stále používány v operačních systémech, hlavně v Linuxu a UNIXu. ANSI escape kód. ESC/P je escape sekvence definována Epson Corporation pro ovládání tiskáren, [wiki_1147]. To se používá především v jehličkových tiskárnách, a některých inkoustových tiskárnách. Tato sekvence může provádět akce, jako je nastavení textového módu nebo do grafického módu, nastavení normálního nebo tučného písma, nastavení barev, atd. Kódy od 0x20 do 0x7e jsou tisknutelné kódy a část z nich je americká abeceda. Také tato definice je součástí Unicode s názvem Basic Latin Block. Názvy abecedy znaků jsou uvedeny na obr Další názvy znaků mohou být odvozeny z této tabulky. ASCII code Unicode Unicode name Character hexadecimal point [Unicode_1108] 41 U+0041 A LATIN CAPITAL LETTER A 42 U+0042 B LATIN CAPITAL LETTER B 61 U+0061 a LATIN SMALL LETTER A 62 U+0062 b LATIN SMALL LETTER B : : Obr Tabulka kódů a názvů pro znaky abecedy Obr ukazuje speciální tisknutelné znaky s oficiálními názvy Unicode [Unicode_1108]. Ale některé glyfy jsou známé svým slangovým výrazem (označeno modře), nebo podle jmen používaných v minulosti. Tabulka je ponechána v anglickém jazyku, aby nedošlo k nežádoucí změně názvů. 23 U+0023 # NUMBER SIGN Hash or hash key on the telephone Sharp - is a different glyph and it is used in music ASCII Unicode HTML Character [Unicode_1108] Unicode name code point code Other codes or names 20 U+0020 SPACE 21 U+0021! EXCLAMATION SIGN 22 U+0022 " QUOTATION MARK Double quotes or inverted commas 24 U+0024 $ DOLLAR SIGN 25 U+0025 % PERCENT SIGN 26 U+0026 & & AMPERSAND Logical and 27 U+0027 &apos; ' APOSTROPHE 28 U+0028 &lparen; ( LEFT PARENTHESIS Bracket, parentheses 29 U+0029 &rparen; ) RIGHT PARENTHESIS 2A U+002A * ASTERISK 2B U+002B + PLUS SIGN %2B in URL Plus 2C U+002C, COMMA Decimal separator 2D U+002D - HYPHEN-MINUS %2D in URL Minus, hyphen VŠB-TU Ostrava 146

153 2E U+002E. FULL STOP 2F U+002F / SOLIDUS 3A U+003A : COLON 3B U+003B ; SEMICOLON 3C U+003C < < LESS-THAN SIGN Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Dot, very popular term; period, baseline dot Slash, very popular term; fraction slash, division slash In programming languages, it is an abbreviation lt or.lt. 3D U+003D = EQUALS SIGN 3E U+003E > > GREATER-THAN SIGN In programming languages, it is an abbreviation gt or.gt. In shell script (Linux) it means the redirection 3F U+003F? QUESTION MARK 40 COMMERCIAL AT At sign 5B U+005B [ LEFT SQUARE BRACKET 5C U+005C \ REVERSE SOLIDUS Backslash 5D U+005D ] RIGHT SQUARE BRACKET 5E U+005E ^ CIRCUMFLEX ACCENT In ASCII caret, Unicode caret is the glyph, (U+2038) CARET 5F U+005F _ LOW LINE Underscore, Understrike; Underbar; Underline 60 U+0060 ` GRAVE ACCENT 7B U+007B { LEFT CURLY BRACKET 7C U+007C VERTICAL LINE Vertical bar, logical or, pipe 7D U+007D } RIGHT CURLY BRACKET 7E U+007E ~ TILDE Logical not 11.7 Kódové stránky Obr Tabulka kódů a názvů pro znaky mimo abecedu Na začátku éry osobních počítačů, byla definována 8-bitová kódovací tabulka, která má název kodovací stránka 437, (code page 437), [wiki_1119]. Nové kódování bylo založeno na klasickém 7-bitovém ASCII kódování a nové znaky a řídicí kódy byly přidány v rozsahu od 0x80 do 0xFF, obr Rozmezí od 0x20 do 0x7F 8-bitového kódování odpovídá 7-bitovému kódu ASCII. Kódová stránka 437. Zdroj: Obr Kódová stránka 437 VŠB-TU Ostrava 147

154 11. Znaky a Unicode Pouze rozsah od 0 do 0x1F má dva významy, v závislosti na zařízení, které přijímá kód. Je-li kód zaslán do video adaptéru PC v textovém režimu, kód generuje vizuální glyfy, obr Je-li tento kód zaslán do periférií osobního počítače, pak je kód interpretován jako řídicí kód. V horní části od 0x80 do 0xFF obsahuje znaky s diakritikou, řecká abeceda a semigrafické symboly. Tato 8-bitová definice se nazývá kódová stránka 437, code page 437 a je dodnes použivána jako výchozí stránka v mnoha systémech. Osobní počítače se rozšířily do celého světa a mnoho národních znaků nebylo obsaženo v kódovací stránce 437, například česká diakritika, azbuka, atd. Proto byly definovány jiné kódové stránky, které již obsahují chybějící národní znaky. Tyto definice pouze měnily pouze horní prostor v rozsahu od 0x80 do 0xFF, [wiki_1120]. Kódové stránky 437, 850, 852 byly definovány v oblasti operačního systému MS-DOS, [wiki_1139]. Kódové stránky Windows 1250; Windows 1252, byly definovány v oblasti operačního systému Windows, [wiki_1140]. Tyto kódové stránky byla mezinárodní a byly vydány jako standard. Mimo to, mnoho kódových stránek bylo definováno lokálně, což způsobuje vzájemnou neslučitelnost. Mezinárodní organizace pro standardizaci a IEC - ISO/IEC definovala 8 bitové kódy pro všechny světové jazyky a tyto kódy jsou nazývány jako kódové stránky ISO , ISO , ISO , atd. Tato norma navazuje na předchozí definice a ASCII 7 bitový kód. Vše v rozsahu kódové stránky bylo rozděleno do oblastí, které obsahují: Kódové stránky. Rozsah od 0x20 do 0x7e, tato oblast obsahuje latinku a odpovídá definici ASCII. Tato definice je stejná ve všech stránkách. Rozsah od 0xA0 do 0xFF, tato oblast obsahuje národní znaky. Tato definice závisí mimo jiné i na oblastech světa. Rozsah od 0 do 0x1F a 0x80 do 0x9F nejsou definovány standardem. Kódy v těchto rozmezích odpovídají kódům, které jsou definovány podle normy ISO/IEC Jedná se o řídicí kódy C0 a C1. Problém s kompatibilitou také existoval i v České republice, kde uživatele používali následující stránky: Kódová stránka 437, která obsahuje americkou abecedu. Tato kódová stránka je nazývána jako Basic Latin Alphabet. A byla první kódovou stránkou pro osobní počítače, [wiki_1119]. Kódová stránka 852 je stránkou pro Central Europe languages, která používá Latin skript. Tato stránka obsahuje českou abecedu a je také známa jako Latin-2, [wiki_1120]. Windows 1252 a ISO jsou obdobné stránky s latinkou pro západní Evropu, [wiki_1121], [wiki_1123]. Windows 1250 a ISO jsou obdobné stránky s latinkou pro střední Evropu, [wiki_1122], [wiki_1124]. Speciální kódové stránky definovány našimi institucemi, které byly nekompatibilními se světovými definicemi, [wiki_1145]. VŠB-TU Ostrava 148

155 Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Každý řez písma má samostatný font jako soubor a jedna kódová stránka má spoustu souborů písem pro každý řez písma. Pokud je dokument napsán ve více jazycích, pak musí být nainstalovány všechny odpovídající fonty. Což v jednom osobním počítači není problém. Problém nastává, například když je dokument zaslán příjemci nebo je zveřejněn na internetu. Čtenář nemusí mít nainstalovány všechny požadované kódové stránky a dokument se pro něj stává nečitelným. Tento problém a s ním další jsou řešeny pomocí Unicode. Více informací naleznete v [Zdralek_2014] C0 a C1 řídicí kódy C0 a C1 řídicí kódy jsou použity pro ovládání externích zařízení. Ovládání C0 kódu bylo nejprve definováno pomocí ASCII, a později řídicím kódem C1. Následně řídicí kódy C0 a C1 se staly standardem ISO/IEC Řídicí kód C0 odpovídá definici ASCII v rozmezí od 0 do 0x1F 8- bitové tabulky kódování, [wiki_1125]. Co a C1 řídicí kódy. Řídicí kód C1 je nová sada kódů, které se nachází v rozmezí od 0x80 do 0x9F v 8-bitové kódovací tabulce. Všechny definice a vysvětlení těchto nových kódů lze nalézt ve [wiki_1125]. Kód NEL je kód pro další řádek; to je pokus vyřešit nejednoznačnost sekvence CR+LF. Jiný kód, který stojí za zmínku, je CSI - CONTROL SEQUENCE INTRODUCER. Tento kód je hlavní kód ANSI escape sekvence a je dodržován parametry. ANSI escape sekvence se používá pro ovládání textového terminálu v operačních systémech Linux a UNIX. Kód CSI lze nahradit sekvencí kódů, ESC + [, hexadecimálně 0x1B 0x5B. ESC je escape kód z řídicího kódu C0 a po něm následuje levá hranatá závorka. ASCII code Unicode point ESC+ Acronym Unicode name [Unicode_1108] or other name Description 85 U+0085 ESC+E NEL NEXT LINE (NEL) Equivalent to CR+LF. Used to mark end-of-line on some IBM mainframes. 9B U+009B ESC+[ CSI Used to introduce control sequences that take parameters. CONTROL SEQUENCE INTRODUCER ANSI escape sequence Obr C1 řídicí kód 11.9 Unicode S nástupem personálních počítačů se začala používat diakritika a objevily se kódové stránky. Zavedení kódových stránek přinášelo problémy a neřešilo problém národních abeced komplexně. Více o problému kódových stránek je v literatuře [wiki_1101], [wiki_1102], [wiki_1103], [wiki_1104], [wiki_1105], [wiki_1106]. Proto v 90 letech 20 století vznikla skupina, která si dala za cíl definovat jeden princip kódování pro všechny národní abecedy celého světa. Unicode je kód, který umožňuje kódovat jakékoliv světové abecedy. Předcházející pokusy byly velmi problematické. Nutno si uvědomit, že na celém světě jsou živé a mrtvé jazyky. Živé jazyky jsou používány lidmi dnešního světa. Mrtvé jazyky jsou historické jazyky jako například VŠB-TU Ostrava 149

Booleovská algebra. Booleovské binární a unární funkce. Základní zákony.

Booleovská algebra. Booleovské binární a unární funkce. Základní zákony. Booleovská algebra. Booleovské binární a unární funkce. Základní zákony. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz

Více

ČÍSELNÉ SOUSTAVY PŘEVODY

ČÍSELNÉ SOUSTAVY PŘEVODY ČÍSELNÉ SOUSTAVY V každodenním životě je soustava desítková (decimální, dekadická) o základu Z=10. Tato soustava používá číslice 0, 1, 2, 3, 4, 5, 6, 7, 8 a 9, není však vhodná pro počítače nebo číslicové

Více

Gymnázium Vysoké Mýto nám. Vaňorného 163, 566 01 Vysoké Mýto

Gymnázium Vysoké Mýto nám. Vaňorného 163, 566 01 Vysoké Mýto Gymnázium Vysoké Mýto nám. Vaňorného 163, 566 01 Vysoké Mýto Registrační číslo projektu Šablona Autor Název materiálu CZ.1.07/1.5.00/34.0951 III/2 INOVACE A ZKVALITNĚNÍ VÝUKY PROSTŘEDNICTVÍM ICT Mgr. Jana

Více

Základní jednotky používané ve výpočetní technice

Základní jednotky používané ve výpočetní technice Základní jednotky používané ve výpočetní technice Nejmenší jednotkou informace je bit [b], který může nabývat pouze dvou hodnot 1/0 (ano/ne, true/false). Tato jednotka není dostatečná pro praktické použití,

Více

Architektura počítačů Logické obvody

Architektura počítačů Logické obvody Architektura počítačů Logické obvody http://d3s.mff.cuni.cz/teaching/computer_architecture/ Lubomír Bulej bulej@d3s.mff.cuni.cz CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics Digitální

Více

DIGITÁLN LNÍ OBVODY A MIKROPROCESORY 1. ZÁKLADNÍ POJMY DIGITÁLNÍ TECHNIKY

DIGITÁLN LNÍ OBVODY A MIKROPROCESORY 1. ZÁKLADNÍ POJMY DIGITÁLNÍ TECHNIKY DIGITÁLN LNÍ OBVODY A MIKROPROCESORY BDOM Prof. Ing. Radimír Vrba, CSc. Doc. Ing. Pavel Legát, CSc. Ing. Radek Kuchta Ing. Břetislav Mikel Ústav mikroelektroniky FEKT VUT @feec.vutbr.cz

Více

12. Booleova algebra, logická funkce určitá a neurčitá, realizace logických funkcí, binární kódy pro algebraické operace.

12. Booleova algebra, logická funkce určitá a neurčitá, realizace logických funkcí, binární kódy pro algebraické operace. 12. Booleova algebra, logická funkce určitá a neurčitá, realizace logických funkcí, binární kódy pro algebraické operace. Logická proměnná - proměnná nesoucí logickou hodnotu Logická funkce - funkce přiřazující

Více

Fz =a z + a z +...+a z +a z =

Fz =a z + a z +...+a z +a z = Polyadické číselné soustavy - převody M-místná skupina prvků se z-stavovou abecedou umožňuje zobrazit z m čísel. Zjistíme, že stačí vhodně zvolit číslo m, abychom mohli zobrazit libovolné číslo menší než

Více

Architektura počítačů Logické obvody

Architektura počítačů Logické obvody Architektura počítačů Logické obvody http://d3s.mff.cuni.cz/teaching/computer_architecture/ Lubomír Bulej bulej@d3s.mff.cuni.cz CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics 2/36 Digitální

Více

Základy číslicové techniky. 2 + 1 z, zk

Základy číslicové techniky. 2 + 1 z, zk Základy číslicové techniky 2 + 1 z, zk Ing. Vít Fábera, K614 e-mail: fabera@fd.cvut.cz K508, 5. patro, laboratoř, 2 2435 9555 Ing. Tomáš Musil, Ph.D., K620 e-mail: musil@asix.cz K508, 5. patro, laboratoř,

Více

Struktura a architektura počítačů (BI-SAP) 5

Struktura a architektura počítačů (BI-SAP) 5 Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Struktura a architektura počítačů (BI-SAP) 5 doc. Ing. Hana Kubátová, CSc. Katedra číslicového návrhu Fakulta informačních technologii

Více

Binární logika Osnova kurzu

Binární logika Osnova kurzu Osnova kurzu 1) Základní pojmy; algoritmizace úlohy 2) Teorie logického řízení 3) Fuzzy logika 4) Algebra blokových schémat 5) Vlastnosti členů regulačních obvodů 6) Vlastnosti regulátorů 7) Stabilita

Více

Číselné soustavy v mikroprocesorové technice Mikroprocesorová technika a embedded systémy

Číselné soustavy v mikroprocesorové technice Mikroprocesorová technika a embedded systémy Ústav radioelektroniky Vysoké učení technické v Brně Číselné soustavy v mikroprocesorové technice Mikroprocesorová technika a embedded systémy Přednáška 8 doc. Ing. Tomáš Frýza, Ph.D. listopad 2012 Obsah

Více

Booleova algebra. ZákonyBooleovy algebry Vyjádření logických funkcí

Booleova algebra. ZákonyBooleovy algebry Vyjádření logických funkcí Booleova algebra ZákonyBooleovy algebry Vyjádření logických funkcí pravdivostní tabulka logický výraz seznam indexů vstupních písmen mapa vícerozměrná krychle 30-1-13 O. Novák 1 Booleova algebra Booleova

Více

Mikroprocesorová technika (BMPT)

Mikroprocesorová technika (BMPT) Mikroprocesorová technika (BMPT) Přednáška č. 10 Číselné soustavy v mikroprocesorové technice Ing. Tomáš Frýza, Ph.D. Obsah přednášky Číselné soustavy v mikroprocesorové technice Dekadická, binární, hexadecimální

Více

Číselné vyjádření hodnoty. Kolik váží hrouda zlata?

Číselné vyjádření hodnoty. Kolik váží hrouda zlata? Čísla a logika Číselné vyjádření hodnoty Au Kolik váží hrouda zlata? Dekadické vážení Když přidám osmé závaží g, váha se převáží => závaží zase odeberu a začnu přidávat závaží x menší 7 závaží g 2 závaží

Více

3 Jednoduché datové typy 2 3.1 Interpretace čísel v paměti počítače... 3. 4 Problémy s matematickými operacemi 5

3 Jednoduché datové typy 2 3.1 Interpretace čísel v paměti počítače... 3. 4 Problémy s matematickými operacemi 5 Obsah Obsah 1 Číselné soustavy 1 2 Paměť počítače 1 2.1 Měření objemu paměti počítače................... 1 3 Jednoduché datové typy 2 3.1 Interpretace čísel v paměti počítače................. 3 4 Problémy

Více

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty Data v počítači Informační data (elementární datové typy) Logické hodnoty Znaky Čísla v pevné řádové čárce (celá čísla) v pohyblivé (plovoucí) řád. čárce (reálná čísla) Povelová data (instrukce programu)

Více

Číselné soustavy a převody mezi nimi

Číselné soustavy a převody mezi nimi Číselné soustavy a převody mezi nimi Základní požadavek na počítač je schopnost zobrazovat a pamatovat si čísla a provádět operace s těmito čísly. Čísla mohou být zobrazena v různých číselných soustavách.

Více

Úvod do informačních technologií

Úvod do informačních technologií Úvod do informačních technologií přednášky Jan Outrata září prosinec 2009 (aktualizace září prosinec 2012) Jan Outrata (KI UP) Úvod do informačních technologií září prosinec 2012 1 / 58 Binární logika

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Booleovská algebra. Pravdivostní tabulka. Karnaughova mapa. Booleovské n-krychle. Základní zákony. Unární a binární funkce. Podmínky.

Booleovská algebra. Pravdivostní tabulka. Karnaughova mapa. Booleovské n-krychle. Základní zákony. Unární a binární funkce. Podmínky. Booleovská algebra. Pravdivostní tabulka. Karnaughova mapa. Booleovské n-krychle. Základní zákony. Unární a binární funkce. Podmínky. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Výrazy Operátory Výrazy Verze pro akademický rok 2012/2013 1 Operace, operátory Unární jeden operand, operátor se zapisuje ve většině případů před operand, v některých případech

Více

Výukový materiál zpracovaný v rámci projektu Výuka moderně Registrační číslo projektu: CZ.1.07/1.5.00/34.0205

Výukový materiál zpracovaný v rámci projektu Výuka moderně Registrační číslo projektu: CZ.1.07/1.5.00/34.0205 Střední průmyslová škola strojnická Olomouc, tř.7. listopadu 49 Výukový materiál zpracovaný v rámci projektu Výuka moderně Registrační číslo projektu: CZ..07/.5.00/34.0205 Šablona: III/2 Informační technologie

Více

Základní pojmy. Program: Algoritmus zapsaný v programovacím jazyce, který řeší nějaký konkrétní úkol. Jedná se o posloupnost instrukcí.

Základní pojmy. Program: Algoritmus zapsaný v programovacím jazyce, který řeší nějaký konkrétní úkol. Jedná se o posloupnost instrukcí. Základní pojmy IT, číselné soustavy, logické funkce Základní pojmy Počítač: Stroj na zpracování informací Informace: 1. data, která se strojově zpracovávají 2. vše co nám nebo něčemu podává (popř. předává)

Více

Nejvyšší řád čísla bit č. 7 bit č. 6 bit č.5 bit č. 4 bit č. 3 bit č. 2 bit č. 1 bit č. 0

Nejvyšší řád čísla bit č. 7 bit č. 6 bit č.5 bit č. 4 bit č. 3 bit č. 2 bit č. 1 bit č. 0 Číselné soustavy Cílem této kapitoly je sezn{mit se se z{kladními jednotkami používanými ve výpočetní technice. Poznat číselné soustavy, kódy a naučit se převody mezi číselnými soustavami. Klíčové pojmy:

Více

teorie logických spojek chápaných jako pravdivostní funkce

teorie logických spojek chápaných jako pravdivostní funkce Výroková logika teorie logických spojek chápaných jako pravdivostní funkce zabývá se způsoby tvoření výroků pomocí spojek a vztahy mezi pravdivostí různých výroků používá specifický jazyk složený z výrokových

Více

Číselné soustavy. Ve světě počítačů se využívají tři základní soustavy:

Číselné soustavy. Ve světě počítačů se využívají tři základní soustavy: Číselné soustavy Ve světě počítačů se využívají tři základní soustavy: dekadická binární hexadecimální patří mezi soustavy poziční, tj. desítková hodnota každé číslice (znaku) závisí na její pozici vzhledem

Více

Y36SAP. Osnova. Číselné soustavy a kódy, převody, aritmetické operace Y36SAP Poziční číselné soustavy a převody.

Y36SAP. Osnova. Číselné soustavy a kódy, převody, aritmetické operace Y36SAP Poziční číselné soustavy a převody. Y36SAP Číselné soustavy a kódy, převody, aritmetické operace Tomáš Brabec, Miroslav Skrbek - X36SKD-cvičení. Úpravy pro SAP Hana Kubátová Osnova Poziční číselné soustavy a převody Dvojková soust., převod

Více

2. LOGICKÉ OBVODY. Kombinační logické obvody

2. LOGICKÉ OBVODY. Kombinační logické obvody Hardware počítačů Doc.Ing. Vlastimil Jáneš, CSc, K620, FD ČVUT E-mail: janes@fd.cvut.cz Informace a materiály ke stažení na WWW: http://www.fd.cvut.cz/personal/janes/hwpocitacu/hw.html 2. LOGICKÉ OBVODY

Více

Principy počítačů. Prof. RNDr. Peter Mikulecký, PhD.

Principy počítačů. Prof. RNDr. Peter Mikulecký, PhD. Principy počítačů Prof. RNDr. Peter Mikulecký, PhD. Číselné soustavy Obsah přednášky: Přednáška 3 Číselné soustavy a převody mezi nimi Kódy, přímý, inverzní a doplňkový kód Znakové sady Úvod Člověk se

Více

Úvod do informačních technologií

Úvod do informačních technologií Úvod do informačních technologií Jan Outrata KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO V OLOMOUCI přednášky Binární logika Jan Outrata (Univerzita Palackého v Olomouci) Úvod do informačních technologií

Více

PJC Cvičení #2. Číselné soustavy a binární reprezentace proměnných

PJC Cvičení #2. Číselné soustavy a binární reprezentace proměnných PJC Cvičení #2 Číselné soustavy a binární reprezentace proměnných Číselné soustavy Desítková (decimální) kdo nezná, tak...!!! Dvojková (binární) - nejjednodušší Šestnáctková (hexadecimální) - nejpoužívanější

Více

Logické řízení. Náplň výuky

Logické řízení. Náplň výuky Logické řízení Logické řízení Náplň výuky Historie Logické funkce Booleova algebra Vyjádření Booleových funkcí Minimalizace logických funkcí Logické řídicí obvody Blokové schéma Historie Číslicová technika

Více

Čísla v plovoucířádovéčárce. INP 2008 FIT VUT v Brně

Čísla v plovoucířádovéčárce. INP 2008 FIT VUT v Brně Čísla v plovoucířádovéčárce INP 2008 FIT VUT v Brně Čísla v pevné vs plovoucí řádové čárce Pevnářádováčárka FX bez desetinné části (8 bitů) Přímý kód: 0 až 255 Doplňkový kód: -128 až 127 aj. s desetinnou

Více

Formální systém výrokové logiky

Formální systém výrokové logiky Formální systém výrokové logiky 1.Jazyk výrokové logiky Nechť P = {p,q,r, } je neprázdná množina symbolů, které nazýváme prvotní formule. Symboly jazyka L P výrokové logiky jsou : a) prvky množiny P, b)

Více

Číslicové obvody základní pojmy

Číslicové obvody základní pojmy Číslicové obvody základní pojmy V číslicové technice se pracuje s fyzikálními veličinami, které lze popsat při určité míře zjednodušení dvěma stavy. Logické stavy binární proměnné nabývají dvou stavů:

Více

Způsoby realizace této funkce:

Způsoby realizace této funkce: KOMBINAČNÍ LOGICKÉ OBVODY U těchto obvodů je výstup určen jen výhradně kombinací vstupních veličin. Hodnoty výstupních veličin nezávisejí na předcházejícím stavu logického obvodu, což znamená, že kombinační

Více

Převody mezi číselnými soustavami

Převody mezi číselnými soustavami Převody mezi číselnými soustavami 1. Převod čísla do dekadické soustavy,kde Z je celé číslo, pro které platí a Řešením je převod pomocí Hornerova schématu Příklad: Převeďte číslo F 3 = 2101 do soustavy

Více

Logické proměnné a logické funkce

Logické proměnné a logické funkce Booleova algebra Logické proměnné a logické funkce Logická proměnná je veličina, která může nabývat pouze dvou hodnot, označených 0 a I (tedy dvojková proměnná) a nemůže se spojitě měnit Logická funkce

Více

Algoritmy I. Číselné soustavy přečíst!!! ALGI 2018/19

Algoritmy I. Číselné soustavy přečíst!!! ALGI 2018/19 Algoritmy I Číselné soustavy přečíst!!! Číselné soustavy Každé číslo lze zapsat v poziční číselné soustavě ve tvaru: a n *z n +a n-1 *z n-1 +. +a 1 *z 1 +a 0 *z 0 +a -1 *z n-1 +a -2 *z -2 +.. V dekadické

Více

P4 LOGICKÉ OBVODY. I. Kombinační Logické obvody

P4 LOGICKÉ OBVODY. I. Kombinační Logické obvody P4 LOGICKÉ OBVODY I. Kombinační Logické obvody I. a) Základy logiky Zákony Booleovy algebry 1. Komutativní zákon duální forma a + b = b + a a. b = b. a 2. Asociativní zákon (a + b) + c = a + (b + c) (a.

Více

Kódováni dat. Kódy používané pro strojové operace

Kódováni dat. Kódy používané pro strojové operace Kódováni dat Před zpracováním dat například v počítači je třeba znaky převést do tvaru, kterému počítač rozumí, tj. přiřadit jim určité kombinace bitů. Tomuto převodu se říká kódování. Kód je předpis pro

Více

Čísla a číselné soustavy.

Čísla a číselné soustavy. Čísla a číselné soustavy. Polyadické soustavy. Převody mezi soustavami. Reprezentace čísel. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK.

Více

Informace, kódování a redundance

Informace, kódování a redundance Informace, kódování a redundance INFORMACE = fakt nebo poznatek, který snižuje neurčitost našeho poznání (entropii) DATA (jednotné číslo ÚDAJ) = kódovaná zpráva INFORAMCE = DATA + jejich INTERPRETACE (jak

Více

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D. Digitální obvody Doc. Ing. Lukáš Fujcik, Ph.D. Základní invertor v technologii CMOS dva tranzistory: T1 vodivostní kanál typ N T2 vodivostní kanál typ P při u VST = H nebo L je klidový proud velmi malý

Více

Výroková logika. Teoretická informatika Tomáš Foltýnek

Výroková logika. Teoretická informatika Tomáš Foltýnek Výroková logika Teoretická informatika Tomáš Foltýnek foltynek@pef.mendelu.cz Teoretická informatika strana 2 Opakování z minulé přednášky Co je to formalismus a co je jeho cílem? Formulujte Russelův paradox

Více

Informační a komunikační technologie

Informační a komunikační technologie Informační a komunikační technologie 2. www.isspolygr.cz Vytvořil: Ing. David Adamovský Strana: 1 Škola Integrovaná střední škola polygrafická Ročník Název projektu 1. ročník SOŠ Interaktivní metody zdokonalující

Více

Číslo materiálu. Datum tvorby Srpen 2012

Číslo materiálu. Datum tvorby Srpen 2012 Číslo projektu Číslo materiálu Název školy Autor Tematická oblast Ročník CZ.1.07/1.5.00/34.0581 VY_32_INOVACE_CTE_2.MA_03_Převod čísel mezi jednotlivými číselnými soustavami Střední odborná škola a Střední

Více

Matematika pro informatiky KMA/MATA

Matematika pro informatiky KMA/MATA Matematika pro informatiky KMA/MATA Informace k předmětu Mgr. Přemysl Rosa rosapr00@pf.jcu.cz, J349 Konzultační hodiny v ZS: úterý 10-11, čtvrtek 15-16 nebo individuálně po předchozí domluvě aktivní účast

Více

1. 5. Minimalizace logické funkce a implementace do cílového programovatelného obvodu CPLD

1. 5. Minimalizace logické funkce a implementace do cílového programovatelného obvodu CPLD .. Minimalizace logické funkce a implementace do cílového programovatelného obvodu Zadání. Navrhněte obvod realizující neminimalizovanou funkci (úplný term) pomocí hradel AND, OR a invertorů. Zaznamenejte

Více

MATA Př 3. Číselné soustavy. Desítková soustava (dekadická) základ 10, číslice 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

MATA Př 3. Číselné soustavy. Desítková soustava (dekadická) základ 10, číslice 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. MATA Př 3 Číselné soustavy Poziční číselná soustava je dnes převládající způsob písemné reprezentace čísel dokonce pokud se dnes mluví o číselných soustavách, jsou tím obvykle myšleny soustavy poziční.

Více

Y36SAP Y36SAP-2. Logické obvody kombinační Formy popisu Příklad návrhu Sčítačka Kubátová Y36SAP-Logické obvody 1.

Y36SAP Y36SAP-2. Logické obvody kombinační Formy popisu Příklad návrhu Sčítačka Kubátová Y36SAP-Logické obvody 1. Y36SAP 26.2.27 Y36SAP-2 Logické obvody kombinační Formy popisu Příklad návrhu Sčítačka 27-Kubátová Y36SAP-Logické obvody Logický obvod Vstupy a výstupy nabývají pouze hodnot nebo Kombinační obvod popsán

Více

Algoritmy a datové struktury

Algoritmy a datové struktury Algoritmy a datové struktury Data a datové typy 1 / 28 Obsah přednášky Základní datové typy Celá čísla Reálná čísla Znaky 2 / 28 Organizace dat Výběr vhodné datvé struktry různá paměťová náročnost různá

Více

KOMBINAČNÍ LOGICKÉ OBVODY

KOMBINAČNÍ LOGICKÉ OBVODY Projekt: Inovace oboru Mechatronik pro Zlínský kraj Registrační číslo: CZ.1.07/1.1.08/03.0009 KOMBINAČNÍ LOGICKÉ OBVODY U těchto obvodů je vstup určen jen výhradně kombinací vstupních veličin. Hodnoty

Více

Sada 1 - Základy programování

Sada 1 - Základy programování S třední škola stavební Jihlava Sada 1 - Základy programování 04. Datové typy, operace, logické operátory Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284

Více

Aritmetické operace a obvody pro jejich realizaci

Aritmetické operace a obvody pro jejich realizaci Kapitola 4 Aritmetické operace a obvody pro jejich realizaci 4.1 Polyadické číselné soustavy a jejich vlastnosti Polyadické soustavy jsou určeny přirozeným číslem z, kterému se říká základ nebo báze dané

Více

Logika. 2. Výroková logika. RNDr. Luděk Cienciala, Ph. D.

Logika. 2. Výroková logika. RNDr. Luděk Cienciala, Ph. D. Logika 2. Výroková logika RNDr. Luděk Cienciala, Ph. D. Tato inovace předmětu Úvod do logiky je spolufinancována Evropským sociálním fondem a Státním rozpočtem ČR, projekt č. CZ. 1.07/2.2.00/28.0216, Logika:

Více

C2115 Praktický úvod do superpočítání

C2115 Praktický úvod do superpočítání C2115 Praktický úvod do superpočítání IX. lekce Petr Kulhánek, Tomáš Bouchal kulhanek@chemi.muni.cz Národní centrum pro výzkum biomolekul, Přírodovědecká fakulta, Masarykova univerzita, Kotlářská 2, CZ-61137

Více

Číselné soustavy: Druhy soustav: Počítání ve dvojkové soustavě:

Číselné soustavy: Druhy soustav: Počítání ve dvojkové soustavě: Přednášející : Ing. Petr Haberzettl Zápočet : práce na doma hlavně umět vysvětlit Ze 120 lidí udělá maximálně 25 :D Literatura : Frištacký - Logické systémy Číselné soustavy: Nevyužíváme 10 Druhy soustav:

Více

Číselné soustavy. Binární číselná soustava

Číselné soustavy. Binární číselná soustava 12. Číselné soustavy, binární číselná soustava. Kódování informací, binární váhový kód, kódování záporných čísel. Standardní jednoduché datové typy s pevnou a s pohyblivou řádovou tečkou. Základní strukturované

Více

Zobrazení dat Cíl kapitoly:

Zobrazení dat Cíl kapitoly: Zobrazení dat Cíl kapitoly: Cílem této kapitoly je sezn{mit čten{ře se způsoby z{pisu dat (čísel, znaků, řetězců) v počítači. Proto jsou zde postupně vysvětleny číselné soustavy, způsoby kódov{ní české

Více

1. Základní pojmy a číselné soustavy

1. Základní pojmy a číselné soustavy 1. Základní pojmy a číselné soustavy 1.1. Základní pojmy Hardware (technické vybavení počítače) Souhrnný název pro veškerá fyzická zařízení, kterými je počítač vybaven. Software (programové vybavení počítače)

Více

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické Jak v Javě primitivní datové typy a jejich reprezentace BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické Obsah Celočíselný datový typ Reálný datový typ Logický datový typ, typ Boolean

Více

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5 Obsah Obsah 1 Programovací jazyk Pascal 1 1.1 Struktura programu v Pascalu.................... 1 2 Proměnné 2 2.1 Vstup a výstup............................ 3 3 Operátory a některé matematické funkce 5

Více

Minimalizace logické funkce

Minimalizace logické funkce VYSOKÉ UČENÍ TEHNIKÉ V RNĚ FKULT ELEKTROTEHNIKY KOMUNIKČNÍH TEHNOLOGIÍ Ústav mikroelektroniky LORTORNÍ VIČENÍ Z PŘEDMĚTU Digitální integrované obvody Minimalizace logické funkce Michal Krajíček Martin

Více

Pokud není uvedeno jinak, uvedený materiál je z vlastních zdrojů autora

Pokud není uvedeno jinak, uvedený materiál je z vlastních zdrojů autora Číslo projektu Číslo materiálu ázev školy Autor ázev Téma hodiny Předmět Ročník /y/ C.1.07/1.5.00/34.0394 VY_3_IOVACE_1_ČT_1.01_ vyjádření čísel v různých číselných soustavách Střední odborná škola a Střední

Více

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

Nejvyšší řád čísla bit č. 7 bit č. 6 bit č.5 bit č. 4 bit č. 3 bit č. 2 bit č. 1 bit č. 0

Nejvyšší řád čísla bit č. 7 bit č. 6 bit č.5 bit č. 4 bit č. 3 bit č. 2 bit č. 1 bit č. 0 Číselné soustavy Cílem této kapitoly je sezn{mit se se z{kladními jednotkami používanými ve výpočetní technice. Poznat číselné soustavy, umět v nich prov{dět z{kladní aritmetické operace a naučit se převody

Více

Výroková logika - opakování

Výroková logika - opakování - opakování ormální zavedení Výroková formule: Máme neprázdnou nejvýše spočetnou množinu A výrokových proměnných. 1. Každá proměnná je výroková formule 2. Když α, β jsou formule, potom ( α), (α β), (α

Více

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

Základy číslicové techniky z, zk

Základy číslicové techniky z, zk Základy číslicové techniky 2 + 1 z, zk Doc. Ing. Vlastimil Jáneš, CSc., K620 e-mail: janes@fd.cvut.cz K508, 5. patro, laboratoř, 2 2435 9555 Ing. Vít Fábera, K614 e-mail: fabera@fd.cvut.cz K508, 5. patro,

Více

Sémantika výrokové logiky. Alena Gollová Výroková logika 1/23

Sémantika výrokové logiky. Alena Gollová Výroková logika 1/23 Výroková logika Alena Gollová Výroková logika 1/23 Obsah 1 Formule výrokové logiky 2 Alena Gollová Výroková logika 2/23 Formule výrokové logiky Výrok je oznamovací věta, o jejíž pravdivosti lze rozhodnout.

Více

0. ÚVOD - matematické symboly, značení,

0. ÚVOD - matematické symboly, značení, 0. ÚVOD - matematické symboly, značení, číselné množiny Výroky Výrok je každé sdělení, u kterého lze jednoznačně rozhodnout, zda je či není pravdivé. Každému výroku lze proto přiřadit jedinou pravdivostní

Více

Matematika B101MA1, B101MA2

Matematika B101MA1, B101MA2 Matematika B101MA1, B101MA2 Zařazení předmětu: povinný předmět 1.ročníku bc studia 2 semestry Rozsah předmětu: prezenční studium 2 + 2 kombinované studium 16 + 0 / semestr Zakončení předmětu: ZS zápočet

Více

Architektury počítačů

Architektury počítačů Architektury počítačů IEEE754 České vysoké učení technické, Fakulta elektrotechnická A0M36APO Architektury počítačů Ver.1.20 2014 1 Fractional Binary Numbers (zlomková binární čísla / čísla v pevné řádové

Více

Základní principy zobrazení čísla Celá čísla s pevnou řádovou čárkou Zobrazení reálných čísel Aritmetika s binárními čísly

Základní principy zobrazení čísla Celá čísla s pevnou řádovou čárkou Zobrazení reálných čísel Aritmetika s binárními čísly Počítačové systémy Zobrazení čísel v počítači Miroslav Flídr Počítačové systémy LS 2007-1/21- Západočeská univerzita v Plzni Vážený poziční kód Obecný předpis čísla vyjádřeného v pozičním systému: C =

Více

1. Matematická logika

1. Matematická logika MATEMATICKÝ JAZYK Jazyk slouží člověku k vyjádření soudů a myšlenek. Jeho psaná forma má tvar vět. Každá vědní disciplína si vytváří svůj specifický jazyk v úzké návaznosti na jazyk živý. I matematika

Více

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo Operátory, výrazy Tomáš Pitner, upravil Marek Šabo Operátor "Znaménko operace", pokyn pro vykonání operace při vyhodnocení výrazu. V Javě mají operátory napevno daný význam, nelze je přetěžovat jako v

Více

Sylabus kurzu Elektronika

Sylabus kurzu Elektronika Sylabus kurzu Elektronika 5. ledna 2004 1 Analogová část Tato část je zaměřena zejména na elektronické prvky a zapojení v analogových obvodech. 1.1 Pasivní elektronické prvky Rezistor, kondenzátor, cívka-

Více

1 Výroková logika 1. 2 Predikátová logika 3. 3 Důkazy matematických vět 4. 4 Doporučená literatura 7

1 Výroková logika 1. 2 Predikátová logika 3. 3 Důkazy matematických vět 4. 4 Doporučená literatura 7 1 Výroková logika 1 Výroková logika 1 2 Predikátová logika 3 3 Důkazy matematických vět 4 4 Doporučená literatura 7 Definice 1.1 Výrokem rozumíme každé sdělení, o kterém má smysl uvažovat, zda je, či není

Více

ČÍSELNÉ SOUSTAVY. Číselnou soustavu, která pro reprezentaci čísel využívá pouze dvou číslic, nazýváme soustavou dvojkovou nebo binární.

ČÍSELNÉ SOUSTAVY. Číselnou soustavu, která pro reprezentaci čísel využívá pouze dvou číslic, nazýváme soustavou dvojkovou nebo binární. Číselné soustavy V běžném životě používáme soustavu desítkovou. Desítková se nazývá proto, že má deset číslic 0 až 9 a v jednom řádu tak dokáže rozlišit deset různých stavů. Mikrokontroléry (a obecně všechny

Více

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů. Základní symboly - písmena A B C Y Z a b c y z - číslice 0 1 2 9 - speciální symboly + - * / =., < > = a další - klíčová slova and array begin case const a další Klíčová slova jsou chráněnými útvary,

Více

Matematická analýza 1

Matematická analýza 1 Matematická analýza 1 ZS 2019-20 Miroslav Zelený 1. Logika, množiny a základní číselné obory 2. Limita posloupnosti 3. Limita a spojitost funkce 4. Elementární funkce 5. Derivace 6. Taylorův polynom Návod

Více

LOGICKÉ OBVODY 2 kombinační obvody, minimalizace

LOGICKÉ OBVODY 2 kombinační obvody, minimalizace LOGICKÉ OBVODY 2 kombinační obvody, minimalizace logické obvody kombinační logické funkce a jejich reprezentace formy popisu tabulka, n-rozměrné krychle algebraický zápis mapy 9..28 Logické obvody - 2

Více

Úvod do programování 7. hodina

Úvod do programování 7. hodina Úvod do programování 7. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015 Umíme z minulé hodiny Syntax Znaky Vlastní implementace

Více

Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace

Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace Vektory a matice Aplikovaná matematika I Dana Říhová Mendelu Brno Obsah 1 Vektory Základní pojmy a operace Lineární závislost a nezávislost vektorů 2 Matice Základní pojmy, druhy matic Operace s maticemi

Více

ISU Cvičení 1. Marta Čudová

ISU Cvičení 1. Marta Čudová ISU Cvičení 1 Marta Čudová Supercomputing Technologies Reseaŕch Group Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole icudova@fit.vutbr.cz Kdo

Více

5 Přehled operátorů, příkazy, přetypování

5 Přehled operátorů, příkazy, přetypování 5 Přehled operátorů, příkazy, přetypování Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně budou uvedeny detaily týkající se operátorů. Doba nutná k nastudování

Více

P2 Číselné soustavy, jejich převody a operace v čís. soustavách

P2 Číselné soustavy, jejich převody a operace v čís. soustavách P Číselné soustvy, jejich převody operce v čís. soustvách. Zobrzení čísl v libovolné číselné soustvě Lidé využívjí ve svém životě pro zápis čísel desítkovou soustvu. V této soustvě máme pro zápis čísel

Více

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D. Digitální obvody Doc. Ing. Lukáš Fujcik, Ph.D. Realizace kombinačních logických funkcí Realizace kombinační logické funkce = sestavení zapojení obvodu, který ze vstupních proměnných vytvoří výstupní proměnné

Více

2. ÚVOD DO OVLÁDACÍ TECHNIKY

2. ÚVOD DO OVLÁDACÍ TECHNIKY Projekt: Inovace oboru Mechatronik pro Zlínský kraj Registrační číslo: CZ.1.07/1.1.08/03.0009 2. ÚVOD DO OVLÁDACÍ TECHNIKY OVLÁDACÍ TECHNIKA A LOGICKÉ ŘÍZENÍ 2.1.5 LOGICKÉ FUNKCE Cíle: Po prostudování

Více

Základy logiky a teorie množin

Základy logiky a teorie množin Pracovní text k přednášce Logika a teorie množin (I/2007) 1 1 Struktura přednášky Matematická logika 2 Výroková logika Základy logiky a teorie množin Petr Pajas pajas@matfyz.cz Predikátová logika 1. řádu

Více

Pohled do nitra mikroprocesoru Josef Horálek

Pohled do nitra mikroprocesoru Josef Horálek Pohled do nitra mikroprocesoru Josef Horálek Z čeho vycházíme = Vycházíme z Von Neumannovy architektury = Celý počítač se tak skládá z pěti koncepčních bloků: = Operační paměť = Programový řadič = Aritmeticko-logická

Více

Struktura a architektura počítačů (BI-SAP) 6

Struktura a architektura počítačů (BI-SAP) 6 Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Struktura a architektura počítačů (BI-SAP) 6 doc. Ing. Hana Kubátová, CSc. Katedra číslicového návrhu Fakulta informačních technologii

Více

Disjunktivní a konjunktivní lní tvar formule. 2.přednáška

Disjunktivní a konjunktivní lní tvar formule. 2.přednáška Disjunktivní a konjunktivní normáln lní tvar formule 2.přednáška Disjunktivní normáln lní forma Definice Řekneme, že formule ( A ) je v disjunktivním normálním tvaru (formě), zkráceně v DNF, jestliže je

Více

Matematika (CŽV Kadaň) aneb Úvod do lineární algebry Matice a soustavy rovnic

Matematika (CŽV Kadaň) aneb Úvod do lineární algebry Matice a soustavy rovnic Přednáška třetí (a pravděpodobně i čtvrtá) aneb Úvod do lineární algebry Matice a soustavy rovnic Lineární rovnice o 2 neznámých Lineární rovnice o 2 neznámých Lineární rovnice o dvou neznámých x, y je

Více

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4 Uložení dat v počítači Data = užitečné, zpracovávané informace Kódování (formát) dat = způsob uložení v počítači (nutno vše převést na čísla ve dvojkové soustavě) Příklady kódování dat Text každému znaku

Více

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru: 3 Maticový počet 3.1 Zavedení pojmu matice Maticí typu (m, n, kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru: a 11 a 12... a 1k... a 1n a 21 a 22...

Více