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/28.0062 Evropského sociálního fondu a státním rozpočtem České republiky.
Autor:
Ing. Zdeňka Chmelíková, Ph.D. doc. Ing. Jaroslav Zdrálek, Ph.D.
Název
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO
Vydavatel:
Vydání Rok vydání Náklad Vydala:
VŠB – technická univerzita Ostrava Fakulta elektrotechniky a informatiky Katedra telekomunikační techniky 17. listopadu 15, 708 33 Ostrava první 2014 elektronicky Vysoká škola báňská-Technická univerzita Ostrava
ISBN
978-80-248-3649-2
CD
Tato publikace neprošla redakční ani jazykovou úpravou.
Obsah
1.
2.
3.
4.
5.
Úvod ................................................................................................................................. 1 1.1
Základní pojmy ......................................................................................................... 1
1.2
Endian ....................................................................................................................... 3
1.3
Binární prefixy – norma IEC ...................................................................................... 4
1.4
Reference ................................................................................................................. 5
Číselné soustavy ............................................................................................................... 6 2.1
Polynom číselné soustavy......................................................................................... 7
2.2
Číselné soustavy používané v číslicových systémech ............................................... 9
2.3
Převod čísel mezi číselnými soustavami ................................................................... 9
2.4
Reference ............................................................................................................... 13
Booleova algebra ............................................................................................................ 14 3.1
Výroková logika ...................................................................................................... 14
3.2
Definice Booleovy algebry ...................................................................................... 17
3.3
Booleovská funkce.................................................................................................. 21
3.4
Booleovské výrazy .................................................................................................. 23
3.5
Reference ............................................................................................................... 28
Návrh Booleovské funkce ............................................................................................... 29 4.1
Logická hradla ......................................................................................................... 30
4.2
Syntéza ................................................................................................................... 34
4.3
Minimalizace pomocí Karnaughovy mapy.............................................................. 38
4.4
Realizace pomocí hradel NAND a NOR................................................................... 42
4.5
Algoritmy minimalizace .......................................................................................... 43
4.6
Reference ............................................................................................................... 44
Reálná čísla ..................................................................................................................... 46 5.1
6.
Reference ............................................................................................................... 47
Celá čísla ......................................................................................................................... 49 6.1
Celá čísla bez znaménka ......................................................................................... 50
VŠB-TU Ostrava
iii
7.
8.
9.
6.2
Celé číslo se znaménkem........................................................................................ 50
6.3
Přímý kód................................................................................................................ 51
6.4
Jednotkový doplněk (inverzní kód) ........................................................................ 52
6.5
Dvojkový doplněk (doplňkový kód) ........................................................................ 53
6.6
Převod do dvojkového doplňku ............................................................................. 54
6.7
Převod z dvojkového doplňku ................................................................................ 55
6.8
Kód s posunutou nulou – offset binary .................................................................. 56
6.9
Převod z a do kódu s posunutou nulou .................................................................. 57
6.10
BCD čísla ................................................................................................................. 58
6.11
Desítkový doplněk .................................................................................................. 60
6.12
Reference ............................................................................................................... 61
Aritmetické operace pro celá čísla ................................................................................. 63 7.1
Příznaky operací (Flag) ........................................................................................... 63
7.2
Znaménkové rozšíření ............................................................................................ 64
7.3
Sčítání čísel bez znaménka a v dvojkovém doplňku ............................................... 65
7.4
Odčítání čísel bez znaménka ve dvojkovém doplňku ............................................. 67
7.5
Sčítání a odčítání v přímém kódu ........................................................................... 68
7.6
Sčítání a odčítání v binárním posuvu...................................................................... 70
7.7
Sčítání a odčítání v BCD kódu ................................................................................. 72
7.8
Násobení................................................................................................................. 74
7.9
Dělení...................................................................................................................... 75
7.10
Reference ............................................................................................................... 77
Aritmetika v pevné řádové čárce ................................................................................... 80 8.1
Binární měřítko ....................................................................................................... 81
8.2
Formát m.n ............................................................................................................. 83
8.3
Číselný formát ℚ .................................................................................................... 84
8.4
Rozsah zobrazení v pevné řádové čárce................................................................. 84
8.5
Převod z a do pevné řádové čárky.......................................................................... 85
8.6
Aritmetické operace ............................................................................................... 91
8.7
Sčítání a odčítání .................................................................................................... 93
8.8
Násobení................................................................................................................. 94
8.9
Dělení...................................................................................................................... 95
8.10
Reference ............................................................................................................... 96
Čísla v pohyblivé řádové čárce ....................................................................................... 98
VŠB-TU Ostrava
iv
9.1
Significand ............................................................................................................ 101
9.2
Přesnost ................................................................................................................ 102
9.3
Hodnoty v pohyblivé řádové čárce ....................................................................... 102
9.4
Data v pohyblivé řádové čárce ............................................................................. 103
9.5
Formáty definované standardem IEEE 754-2008 ................................................. 105
9.6
Kódování v binárním interchange formátu .......................................................... 107
9.7
Dekadický interchange formát v pohyblivé řádové čárce .................................... 112
9.8
Declet and densely-packed decimal ..................................................................... 117
9.9
Zaokrouhlování ..................................................................................................... 118
9.10
Nečíselná hodnota NaN ........................................................................................ 120
9.11
Nekonečno ........................................................................................................... 121
9.12
Základní výjimky ................................................................................................... 121
9.13
Realizace ............................................................................................................... 122
9.14
Reference ............................................................................................................. 122
10.
Aritmetika v pohyblivé řádové čárce........................................................................ 125
10.1
Zaokrouhlování ..................................................................................................... 127
10.2
Výjimka ................................................................................................................. 130
10.3
Závěrečné operace ............................................................................................... 130
10.4
Formát minifloat v pohyblivé řádové čárce ......................................................... 131
10.5
Sčítání a odčítání .................................................................................................. 133
10.6
Násobení............................................................................................................... 134
10.7
Dělení.................................................................................................................... 136
10.8
Reference ............................................................................................................. 136
11.
Znaky a Unicode ....................................................................................................... 138
11.1
Terminologie ........................................................................................................ 138
11.2
Fonty ..................................................................................................................... 142
11.3
Bitmapový font ..................................................................................................... 142
11.4
Outline fonty ........................................................................................................ 143
11.5
Stroke fonty .......................................................................................................... 143
11.6
ASCII...................................................................................................................... 144
11.7
Kódové stránky ..................................................................................................... 147
11.8
C0 a C1 řídicí kódy ................................................................................................ 149
11.9
Unicode ................................................................................................................ 149
11.10
Použití Unicode................................................................................................. 152
VŠB-TU Ostrava
v
11.11
UTF-32 .............................................................................................................. 152
11.12
UTF-16 .............................................................................................................. 152
11.13
UTF-8 ................................................................................................................ 154
11.14
Reference ......................................................................................................... 156
VŠB-TU Ostrava
vi
Čí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 telekomuBit nikací. 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
VŠB-TU Ostrava
1
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, Byte 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ě 0000 0000 až 1111 1111; 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 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]. 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 Slovo může být 16, 32 nebo 64 bitů podle architektury procesoru. Více informací je v literatuře [wiki_0106].
hodnota = an-1Bn-1 … + a1B1 + a0B0 + a-1B-1… + a-mB-m an-1
a-m
MSB
LSB
Kde
B je rovno 2, a je základem binární soustavy
Obr. 01-01 Pozice LSB a MSB LSB (Least Significant Bit) představuje koeficient s nejnižší váhou, [wiki_0107]. MSB (Most LSB a MSB 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.
Preferováno 7
MSB
7
LSB
VŠB-TU Ostrava
0
LSB 0
MSB
Změna pozice Změna váhy
0
MSB
0
LSB
7
LSB
7
MSB
2
Čí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. 01-02, [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. 01-02. 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. 01-02.
1.2 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. 01-03 a obr. 01-04. Více informací naleznete v [wiki_0110]. MSB
Základní jednotka Základní jednotka je byte je slovo
LSB
0x 08 09 0A 0B 0C 0D 0E 0F
a a+1 a+2
a+7
0F 0E 0D 0C 0B 0A 09 08
a
(ab)
0E0F 0C0D 0A0B 0809
Little endian, LSB základní jednotka je v nejnižší adrese
a+7
Obr. 01-03 Little endian
Základní jednotka je slovo a
a+3
0809 0A0B 0C0D 0E0F
a+7
Základní jednotka je byte a a+1 a+2
a+7
MSB
LSB
0x 08 09 0A 0B 0C 0D 0E 0F
08 09 0A 0B 0C 0D 0E 0F
Big endian, MSB základní jednotka je na nejnižší adrese.□
Obr. 01-04 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. 01-03. 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
1. Úvod index během přenosu, obr. 01-04. 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 = 103. Naproti tomu počítačoví odborníci vědí, že v oblasti počítačů předpona kilo znamená 1024 = 210. Rozdíl mezi těmito Binární prefixy 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 466.37 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 1 474 560 Bytů (1.44 * 103 * 210). Tyto nesrovnalosti řeší Norma IEC 60027-2, která je v České republice platná od 1. dubna 2004. 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. 01-05. Dekadické SI prefixy Základ Symbol Název 1000 k kilo 1000 M mega 10002 G giga 10003 T tera 10004 P peta 10005 E exa 10006 Z zetta 10007 Y yota 10008
Základ 10 103 106 109 1012 1015 1018 1021 1024
Symbol ki Mi Gi Ti Pi Ei Zi Yi
Binární SI prefixy Základ Název 1024 kibi 1024 mebi 10242 gibi 10243 tebi 10244 pebi 10245 exbi 10246 zebi 10247 yobi 10248
Základ 2 210 220 230 240 250 260 270 280
Obr. 01-05 Dekadické a binární SI prefixy
Procvičení 216 = 26 x 210 = 64 ki 233 = 23 x 230 = 8 Gi 228 = 28 * 220 = 256 Mi 249 = 29 * 240 = 512 Ti
Binární prefixy procvičení
2 kibit = 2 x 210 = 211 = 2 048 bitů 2 kbit = 2 x 103 = 2 000 bitů 64 Mibit = 26 x 220 = 226 bitů 64 Mbit = 64 x 106 = 64 000 000 bitů 128 GiB = 27 x 230 = 237 bitů 128 GB = 128 x 109 = 128 000 000 000 B
VŠB-TU Ostrava
4
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO
1 kiB = 8 kibit = 8 x 210 = 23 x 210 = 213 = 8 192 bitů
1.4 Reference [Katz_2005]
Randy H. Katz, Gaetano Borriello: Contemporary Logic Design, Second Edition; Person Prentice Hall 2005; ISBN 0-201-30857-6
[Roth_2004]
Charles H. Roth, Jr.: Fundamentals of Logic Design; Thomson, Brooks/Cole 2004; ISBN 0-534-37804-8
[Wakerly_2006] John F. Wakerly: Digital Design, Principles and Practice, Fourth Edition; Pearson Practice Hall 2006; ISBN 0-13-186-389-4 [wiki_0101]
Digital data; http://en.wikipedia.org/wiki/Digital_data; on line 2014-10-21
[wiki_0102]
Bit; http://en.wikipedia.org/wiki/Bit; on line 2014-1021
[wiki_0103]
Byte; http://en.wikipedia.org/wiki/Byte; on line 2014-1-21
[wiki_0104]
Octet (computing); http://en.wikipedia.org/wiki/Octet_(computing); on line 2014-1021
[wiki_0105]
Nibble; http://en.wikipedia.org/wiki/Nibble; on line 2014-10-21
[wiki_0106]
Word (computer architecture); http://en.wikipedia.org/wiki/Word_(computer_architecture); on line 2014-10-21
[wiki_0107]
Least significant bit; http://en.wikipedia.org/wiki/Least_significant_bit; on line 2014-10-21
[wiki_0108]
Most significant bit; http://en.wikipedia.org/wiki/Most_significant_bit; on line 2014-10-21
[wiki_0109]
Bit numbering, http://en.wikipedia.org/wiki/Bit_numbering; on line 201410-21
[wiki_0110]
Endianness; http://en.wikipedia.org/wiki/Endianness; on line 2014-10-21
[wiki_0111]
Binary prefix; http://en.wikipedia.org/wiki/Binary_prefix; on line 2014-1021
[wiki_0112]
Endianita; http://cs.wikipedia.org/wiki/Endianita; on line 2014-10-21
[IEC 60027-2]
IEC 60027-2, International Standard, Letter symbols to be used in electrical technology – Part 2: Telecommunications and electronics
VŠB-TU Ostrava
5
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
Definice čísla Číslo je uspořádaná množina symbolů (znaků), kterým říkáme číslice.
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 176410. Určitým číslům jsou přiřazena pís- Nepoziční zápis mena: 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.
Dekadická číselná soustava 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Binární číselná soustava 0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 10000
Oktální číselná soustava 0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20
Hexadecimální číselná soustava 0 1 2 3 4 5 6 7 8 9 A B C D E F 10
Obr. 02-01 Číslice a řády v číselných soustavách VŠB-TU Ostrava
6
Čí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 = 2x103 + 5x102 + 6x101 + 8x100.
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 = 3x10-1 + 9x10-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. 02-01 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. 02-02 jsou uvedeny možné zápisy čísel v nejčastěji používaných číselných soustavách. Literatura 10112 138 1110 B16 (1011)2 (11)10 (B)16
1011B 13O 11D BH 0b1011 0d11 0hB
Zápis v programovacích jazycích Language C Jiné jazyky 2#1011 B”1011” 013 8#13 11 11 D”11” 0x10 X”1A1F” B1100 2#1010 11 D11 10#11 0xb HC 16#C
Soustava Binární Oktální Dekadická Hexadecimální Binární Dekadická Hexadecimální
Obr. 02-02 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 an-1an-2…a1a0.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. 𝑁𝑅 = (𝑎𝑛−1 𝑅𝑛−1 + ⋯ + 𝑎2 𝑅2 + 𝑎1 𝑅1 + 𝑎0 𝑅0 + 𝑎−1 𝑅−1 + 𝑎−2 𝑅−2 + ⋯ + 𝑎−𝑚 𝑅−𝑚 ) = 𝑖 = ∑𝑛−1 −𝑚 𝑎𝑖 ∙ 𝑅
(0201)
Kde • • • •
NR je číslo vyjádřené v číselné soustavě o základu, R. ai 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)
VŠB-TU Ostrava
7
Ri je váha a i je řád
2. Číselné soustavy •
•
•
Ri 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]
MSB - nejvýznamnější bit LSB – nejméně významný bit
Se zavedením pojmu reálné číslo souvisí další pojmy, viz obr. 02-03. 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). NI = (an-1an-2…a2a1a0)R = an-1Rn-1 + an-2Rn-2 + …a2R2 + a1R1 + a0R0
(0202)
NF = (0 . a-1a-2a-3 ...a-m)R = a-1R-1 + a-2R-2 + a-3R-3 … + a-mR-m
(0203)
Celá a desetinná část čísla
Kde
NI je celá část reálného čísla. NF je desetinná část reálného čísla. ai 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á část
Radix číselné soustavy - R
Radix tečka
Desetinná část
1234.5678 Nejvýznamnější číslice (MSB)
Nejméně významná číslice (LSB)
Obr. 02-03 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 R0. 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
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Poznámka k základu číselné soustavy 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, 102 - sto, 103 - tisíc, 106 - milión, 109 - miliarda, 1012 - 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 = 3 · 103 + 7 · 102 + 2 · 101 + 5 · 100
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- Dvojková číselná žívá pouze číslice 0, 1. Každé číslo v binární soustavě lze zapsat pomocí polynomu (0201). soustava Například číslo 1101.101 můžeme rozepsat:
(1101.101)B = 1 · 23 + 1 · 22 + 0 · 21 + 1 · 20 + 1 · 2-1 + 0 · 2-2 + 1 · 2-3
Zápisu čísla v šestnáctkové soustavě se s výhodou používá pro zkrácení dlouhého binárního Šestnáctková číčísla. Základem této soustavy je číslo 16 (R = 16) a potom čísla v této soustavě se označují selná soustava 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:
(35A1)H = 3 · 163 + 5 · 162 + 10 · 161 + 1 · 160
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 Osmičková čísoustavě se označují písmenem O. Tato soustava využívá číslice 0, 1, 2, 3, 4, 5, 6, 7. Každé selná soustava číslo v oktální soustavě lze zapsat pomocí polynomu: •
(572)O = 5 · 82 + 7 · 81 + 2 · 80
2.3 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é souPřevod do desítstavy a je třeba si uvědomit, že je zcela jiná než v desítkové soustavě. Převody mezi jakýmikoli kové soustavy
VŠB-TU Ostrava
9
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:
20123 = (2 · 33 + 0 · 32 + 1 · 31 + 2 · 30 = 2 · 27 + 0 + 3 + 2) = 5910 110110.01B = (1 · 25 + 1 · 24 + 0 · 23 + 1 · 22 + 1 · 21 + 0 · 20 + 0 2-1 + 1 2-2 = 32 + 16 + 4 + 2 + 0.25) = 54.25D 456.811 = (4 112 + 5 111 + 6 110 + 8 11-1 = 484 + 55 + 6 + 0.728) = 545.72810 D4C.B16 = (13 · 162 + 4 161 + 12 · 160 + 11 16-1 = 256 + 54 + 12 + 0.6875) = 322.687510 0x2AF8 = (2 · 163 +10 · 162 + 15 · 161 + 8 · 160 = 8192 + 2560 + 240 + 8) = 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. 02-04. Algoritmus je: Převáděné číslo dělíme základem nové soustavy R, výsledkem bude podíl Q0 a zbytek a0. Q0 = N/R = an-1Rn-2 + an-2Rn-3 + … a2R1 + a1R0 a zbytek a0. Dalším krokem je dělení podílu Q0 základem nové soustavy R, výsledkem bude podíl Algoritmus pro Q1 a zbytek a1. Q1 = Q0/R = an-1Rn-3 + an-2Rn-4 + … a2R0 a zbytek a1. Pokračujeme tak dlouho, dokud podíl nebude roven nule a zbytek an-1. Qn-1 = Qn-2/R převod celý h čísel = 0 a zbytek an-1. Poziční zápis čísla v nové soustavě získáme tak, že napíšeme všechny zbytky v tomto pořadí od an-1, an-2…a1a0. Převeďte desítkové číslo (527)10 do soustavy o základu R = 7 Řešení: • • • •
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: 52710 = 13527 Obr. 02-04 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 NF. Příklad převodu desetinného čísla je uveden na obr. 02-05. Algoritmus je: • •
Výsledkem prvního násobení je číslo P-1 = NF * R = a-1.a-2a-3…a-m., které rozdělíme na celou část a-1 a novou desetinnou část NF-1 = 0.a-2a-3…a-m. Tato nová desetinná část NF je opět násobena základem nové soustavy R, výsledkem je pak P-2 = NF-1 * R = a-2.a-3…a-m, který je znovu rozdělen na celou část a-2 a novou desetinnou část NF-2 = 0.a-3…a-m.
VŠB-TU Ostrava
10
Čí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í: 0.367 * 16 = 5.872; pouze celá část v uvedeném výsledku představuje první číslici nového čísla, a-1 = 5. 0.872 * 16 = 13.952; celá část výsledku je a-2 = 1310 = 0xD. 0.952 * 16 = 15.232; celá část výsledku je a-3 = 1510 = 0xF. 0.232 * 16 = 3.712; celá část výsledku je a-4 = 3. Výsledek: (0.367)D = (0.5DF3)H Obr. 02-05 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 1100 1011 1001.1112 se rovná CB9.E16. Základní myšlenka převodu je znázorněna v obr. 02-06.
Převod na oktální číslo
.55206
d32475
011 010 100 111 101.101 101 010 000 110 11010100111101.10110101000011 0011 0101 0011 1101.1011 0101 0000 1100
Převod na hexadecimální číslo
c353D
.B50C
Převod mezi binární a oktální nebo hexadecimální soust ou
Oktální číslo Skupina 3 bitů
Binární číslo Skupina 4 bitů Hexadecimální číslo
Obr. 02-06 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 8 4 2 a 1 představují váhy binární soustavy a odpovídají mocninám 2 (23, 22, 21 a 20). Tyto exponenty odpovídají řádům
VŠB-TU Ostrava
11
Princip 8-4-2-1
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 1110 je rovno 10112. Obr. 02-07 ukazuje různé příklady.
Dekadické číslo 0 3 6 10 13 15
3
8 (=2 ) 0 0 0 1 1 1
4 (=2 0 0 1 0 1 1
Váhy ) 2 (=21) 0 1 1 1 0 1
2
0
1 (=2 ) 0 1 0 0 1 1
Odpovídající binární číslo 0000 0011 0110 1010 1101 1111
Obr. 02-07 Příklady principu 8, 4, 2 a 1 Procvičení Rozložte zadaná čísla pomocí vah dané soustavy 1) 2) 3) 4) 5)
(1024.35)10 = 1 . 103 + 0 . 102 + 2 . 101 + 4 . 100 + + 3 . 10-1 + 5 . 10-2 (1024.35)6 = 1 . 63 + 0 . 62 + 2 . 61 + 4 . 60 + + 3 . 6-1 + 5 . 6-2 (372.52)8 = 3 · 82 + 7 · 81 + 4 · 80 + 5 · 8-1 + 2 · 8-2 (42.3)5 = 4 · 51 + 2 · 50 + 3 · 5-1 (3DA1.2B)16 = 3 · 163 +14 · 162 + 10 · 161 + 1 · 160 + 2 · 16-1 + 11 · 16-2
Příklady k procvičení: a) b) c) d) e) f)
Převeďte číslo 179(10) do dvojkové soustavy. (Výsledek: 17910= 101100112) Převeďte číslo 179(10) do pětkové soustavy. (Výsledek: 17910=12045) Převeďte číslo 50(10) do osmičkové soustavy. (Výsledek: 50(10) = 628) Převeďte číslo 527(10) do šestnáctkové soustavy. (Výsledek: 527(10) = 20F16) Převeďte číslo 493(10) do šestnáctkové soustavy. (Výsledek: 493D = 1EDH) Převeďte číslo 0.12510 do dvojkové a osmičkové soustavy. Výsledek: 0.12510 = 0.0012 = 0.18) g) Převeďte číslo 0.36710 do pětkové a šestnáctkové soustavy s přesností na 4 desetinná místa. (Výsledek: 0.36710 = 0.14045 = (0.5DF3)H h) Převeďte zadané číslo do pětkové soustavy: (123.367)10 = (123 + 0.367)10. (Výsledek: 123.36710 = 443.14045 i) Převeďte výsledek z předchozího příkladu zpět do desítkové soustavy: j) (443.1404)5 = 4*52 + 4*51 +4*50 + + 1*5-1 + 4*5-2 + 0*5-3 + 4*5-4 = 123.366410 k) Převeďte číslo 1100101110012 do osmičkové soustavy. (Výsledek: 110 010 111 0012 = 62718) l)
Převeďte číslo 725,12510 do dvojkové a osmičkové soustavy s přesností na 3 bity. (Výsledek: 725,2510 = 1011010101.0012 = 1325.18)
VŠB-TU Ostrava
12
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO m) Převeďte číslo 1100101110012 do šestnáctkové soustavy. (Výsledek: 1100 1011 10012= CB916) n) Převeďte číslo 110102 do osmičkové soustavy. (Výsledek: 011 0102 =328) o) Převeďte číslo 110102 do šestnáctkové soustavy. (Výsledek: 0001 10102 =1A16) p) Převeďte číslo 11100.012 do osmičkové soustavy. (Výsledek: 011 100.0102= 34.28) q) Převeďte číslo 11100.012 do šestnáctkové soustavy. (Výsledek: 0001 1100.01002= 1C.416) r) Převeďte číslo 5318 do dvojkové soustavy. (Výsledek: 5318 =101 011 0012) s) Převeďte číslo A97.E816 do dvojkové soustavy. (Výsledek: 1110.1110 10002)
A97.E816 = 1010 1001
2.4 Reference [Internet_0201]ČÍSELNÉ SOUSTAVY; http://www.prevod.cz/popis.php?str=564&parent=y; on line 2014-10-21] [Internet_0202]Římská čísla; http://www.converter.cz/prevody/rimska-cisla.htm; on line 2014-10-21 [Wakerly_2006] John F. Wakerly: Digital Design, Principles and Practice, Fourth Edition; Pearson Practice Hall 2006; ISBN 0-13-186-389-4 [wiki_0201]
Numeral system; http://en.wikipedia.org/wiki/Numeral_system; on line 2014-10-21
[wiki_0202]
Roman numerals; http://en.wikipedia.org/wiki/Roman_numerals; on line 2014-10-21
[wiki_0203]
Positional notation; http://en.wikipedia.org/wiki/Positional_notation; on line 2014-10-21
[wiki_0204]
Decimal mark; http://en.wikipedia.org/wiki/Decimal_mark; on line 201410-21
VŠB-TU Ostrava
13
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ý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 03-01. Název Negace Konjunkce Disjunkce Implikace Ekvivalence
Symbol ¬ ˄ ˅ ⇒ ⇔
Čtení Není pravda, že AND (a zároveň) OR (nebo) jestliže……, pak…. … právě tehdy, když…
Zápis ¬p p˄q p˅q p⇒q p⇔q
Tabulka 03-01 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 03-02 je sestavena pravdivostní tabulka pro každý typ tvrzení. p 0 0 1 1
q 0 1 0 1
¬p 1 1 0 0
p˄q 0 0 0 1
p˅q 0 1 1 1
p⇒q 1 1 0 1
p⇔q 1 0 0 1
Tabulka 03-02 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
Tvrzení, formule
Čí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. 03-01, 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. 03-02, včetně odpovídající pravdivostní tabulky. Tap1 Ne Ne Ano Ano
Tap 1
Tap2 Ne Ano Ne Ano
Teče Ne Ano Ano Ano
Logický součet
Tap 2 Obr. 03-01 Příklad disjunkce Tap 1 V Tap 2
Tap 1 Tap 2
Tap1 Ne Ne Ano Ano
Tap2 Ne Ano Ne Ano
Teče Ne Ne Ne Ano
Logický součin
Obr. 03-02 Příklad konjunkce Tap1 ˄ Tap 2 Příklad 2. Máme elektrický obvod, viz obr. 03-03. Žá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. 03-03 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. 03-04. 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
3. Booleova algebra
A Off B Off On On Obr. 03-04 Sériové zapojení spínačů
A
B Off On Off On
Žárovka svítí Ne Ne Ne Ano
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. 03-05 žá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 Off Off On On
A
B
B Off On Off On
Žárovka svítí Ne Ano Ano Ano
Obr. 03-05 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 03-02. x 0 0 1 1
y 0 1 1 1
¬x 1 1 0 0
y ⇒ ¬x 1 1 1 0
¬x ˄ y 0 1 0 0
((y ⇒ ¬x) ⇔ ¬x ˄ y) 0 1 0 1
Tabulka 03-03 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
Logický součet
Čí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 (1815 - 1864) 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 kombi- Booleova načních a sekvenčních obvodech. Budeme dále tedy využívat tu část Booleovy algebry, která algebra 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: Binární 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í “¯”. 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í. Booleova algebra spl Záměna 0 1 ňuje princip duality. □ Záměna · + Příklad:
a · b + a · b’ = a a+1=1
VŠB-TU Ostrava
(a + b) · (a + b’) = a a·0=0 17
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.
Definice Booleovy algebry
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
(A2)
když a = 0 pak a’ = 1
(A2D) když a = 1 pak a’ = 0
(A3)
0·0=0
(A3D) 1 + 1 = 1
(A4)
1·1=1
(A4D) 0 + 0 = 0
(A5)
0·1=1·0=0
(A5D) 1 + 0 = 0 + 1 = 1
Axiomy Booleovy algebry
(A1D) a = 1 když a ≠ 0
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ů
Teorémy Booleovy algebry
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
(T11) a ∙ b + a’ ∙ c + b ∙ c = a ∙ b + a’ ∙ c
(T11D) (a + b) ∙ (a’ + c) ∙ (b + c) = (a + b) ∙ (a’ + c)
Idempotence
(T12) a + a + a + …. + a = a
(T12D) a · a · a · …. · a = a
De Morgan
(T13)
(T13D) (a + b)’ = a’ · b’
(a · b)’ = a’ + b’
(T14) (a ∙ b ∙ c ∙ d ∙ ...)’ = a’ + b’ + c’ + d’ + ..
VŠB-TU Ostrava
(T14D) (a + b + c + d + ..)’ = a’ ∙ b’ ∙ c’ ∙ d’ ∙ .. 18
Čí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 logic- De Morgakého součtu na logický součin a opačně. De Morganova pravidla je možné vyjádřit větami: nova 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 (1806 – 1871) 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 03-04. a 0 0 1 1
b 0 1 0 1
A+b 0 1 1 1
(a + b)´ 1 0 0 0
a´ 1 1 0 0
b´ 1 0 1 0
a´. b´ 1 0 0 0
(a ∙ b)´ 1 1 1 0
a´+ b´ 1 1 1 0
Tabulka 03-04 Důkaz De Morganových pravidel Na obr. 03-06, obr. 03-07 a obr. 03-08 jsou znázorněny aplikace axiomů a teorémů pro minimalizaci výrazů. Přitom na obr. 03-06 a obr. 03-07 je představeno použití teorémů T8 and T8D v disjunktivní a konjunktivní formě. A obr. 03-09 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
Teorém T4
= ab (1) + a´c´e (1) = Teorém T1D
= ab + a´c´e
Obr. 03-06 Aplikace booleových axiomů a teorémů - I
VŠB-TU Ostrava
19
3. Booleova algebra (a + b + c) (a + b + d) (a + d’) (a + b’) (a + b’ + c’) = T1
T8D
= (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’) T4D
T8D (a + b’+ d’.0) (a + b’ + c’) =
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. 03-07 Aplikace booleových axiomů a teorémů - II
(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’)’)’ = T13D De Morganovo pravidlo
= (a’b’c’+ a’b’d’+ a’d + a’b + a’bc)’ = T1D T10 = (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, T2, T1D
T8, T4, T1D
T5
Obr. 03-08 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
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO e) f) g) h) i)
A(B+C) + ABC = A(A+B)+A´(B´+A´) = A´B´C+A´BC´+A´BC+AB´C´+AB´C+ABC´+ABC = (A´+B´)´(A´B)´+(A´+B´)A´B = ((A´+B´)´(A´B+AB´)´+(A´+B´)(A´B+AB´))´
(Výsledek: A(B+C)) (Výsledek: 1) (Výsledek: A+B+C) (Výsledek: B) (Výsledek: A´B´)
Příklad 2. Zjednodušte následující výrazy pomocí konsensu (T11 a T11D): a) b) c) d)
ab + a’c = bc abd + b’de’ = ade’ ab’d + a’bd’ = 0 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: X = 1; z = a; Y = a && b || c; READY = a | !b;
jazyk VHDL: X := ‘1’; Z <= a; Y := a AND b OR c; 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: f: {0, 1}n → {0, 1}
(0301)
kde VŠB-TU Ostrava
21
Úplná Booleovská funkce
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 2n 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. a b c f 0 0 0 1 0 0 1 1 0 1 0 0 0 1 1 1 1 0 0 0 1 0 1 0 1 1 0 1 1 1 1 1 Obr. 03-09 Booleovská funkce pro 3 proměnné
Obor hodnot□
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 2n kombinací vstupních hodnot pro n proměnných, a proto také pravdiPravdivostní vostní tabulka má 2n řádků. Každé kombinaci vstupní proměnných je přiřazena výstupní hodtabulka nota booleovské funkce. Pouze pravdivostní tabulka popisuje booleovskou funkci jasně a jednoznačně. Na obr. 03-09 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}. 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á Neúplná nezáleží – don‘ t care. Tato hodnota se přiřazuje výstupu hlavně v situacích, kdy vstupní kom- Booleovská binace nemůže vůbec nastat. Neúplná Booleovská funkce je potom zobrazení: funkce f: {0, 1}n → {0, 1, X}
(0302) X – don’t care, nezáleží
Kde
{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. 03-10. 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
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO
Číslo 0 1 2 3
x1 0 0 1 1
x0 0 1 0 1
f 0 X 0 X
Číslo 0a1 2a3 4 5 6a7
x2 0 0 1 1 1
x1 0 1 0 0 1
x0 X X 0 1 X
f 0 0 1 1 1
Obr. 03-10 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. 03-11. V praxi jsou používány jen funkce označené 𝑛
žlutou barvou. Pro n proměnných je možné definovat 22 výstupních funkcí, rovnice (0303). Celkový počet funkcí = 22
𝑛
(0303)
Kde
f6 0 1 1 0
f7 0 1 1 1
f8 1 0 0 0
f9 1 0 0 1
f10 1 0 1 0
f11 1 0 1 1
f12 1 1 0 0
f13 1 1 0 1
f14 1 1 1 0
f15 1 1 1 1
x = y (x xnor y)
not y
y implies x
not x
x implies y
Not (x and y)
One
Not(x implies y)
f5 0 1 0 1
Not (x or y)
x and y
f4 0 1 0 0
x or y
Název funkce
f3 0 0 1 1
x ≠ y (x xor y)
f2 0 0 1 0
y
f1 0 0 0 1
Not(y implies x)
f0 0 0 0 0
x
y 0 1 0 1
zero
x 0 0 1 1
n je počet vstupních proměnných.
Obr. 03-11 Všechny funkce pro 2 proměnné
3.4
Booleovské výrazy
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: a1, a1’, x1, y1, z1, 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
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 □ Sestavení m mini. 2n součinových termů. Pro jednu kombinaci vstupních hodnot proměnných je minterm roven Minterm, 1. Pro zbývající kombinace je pak roven 0, obr. 03-12. Pro danou kombinaci vstupních pro- termu mě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. 03-15. Minterm se označuje malým písmenem m s indexem - mi. 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. 03-15.
Indexování mintermu
Čtveřice, kde proměnné jsou v pořadí a, b, c, a d Součin je roven 1, když všechny proměnné mají hodnotu 1, axiom A4. Součet je roven 0, když Pro čtveřici (0 1 0 1), maxterm M5 je a + b’ + c + d’ všechny proměnné mají hodnotu 0, axiom A4D. Obr. 03-12 Minterm a maxterm pro čtveřici vstupních proměnných Pro čtveřici (0 1 0 1), minterm m5 je a’bc’d
Maxterm – je normální součtový term s n proměnnými. Pro n proměnných existuje 2n součSestavení maxtových termů. Pro jednu kombinaci vstupních hodnot proměnných je maxterm roven 0. Pro Maxterm, Mi.□ zbývající kombinace pak je roven 1, obr. 03-12. Pro danou kombinaci vstupních proměnných termu 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. 03-15. Maxterm se označuje velkým písmenem M s indexem - Mi. 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. 03-15. Každá logická funkce může být rozložena jako součet nebo součin nejjednodušších funkcí fi, kde každá tato funkce definuje výstup pro jeden řádek pravdivostní tabulky. Součet nejjednodušších funkcí fi, je uveden na obr. 03-13. 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 0 0 1 1
b 0 1 0 1
f 0 1 1 0
=
a 0 0 1 1
b 0 1 0 1
f0 0 0 0 0
+
a 0 0 1 1
b 0 1 0 1
f1 0 1 0 0
+
a 0 0 1 1
b 0 1 0 1
f2 0 0 1 0
+
a 0 0 1 1
b 0 1 0 1
f3 0 0 0 0
Obr. 03-13 Součet - rozklad funkce
VŠB-TU Ostrava
f = f0 + f1 + f2 + f3
(0304)
f = f1 + f2
(0305) 24
Indexování maxtermu
Čí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 Funkce exclumají hodnotu 0. Proto nejjednodušší funkce f1 a f2 mohou být vyjádřeny pomocí mintermů. sive-or Minterm pro funkci f1 je a’b a minterm pro funkci f2 je ab’. Po dosazení mintermů do vzorce (0305), získáme nový, viz vztah (0306), který definuje funkci EXCLUSIVE-OR. Kanonická disjunktivní f(a,b) = a’b + ab’ (0306) normální forma Obdobně i u součinu nejjednodušších funkcí fi, je uplatněn axiom A5 a teorém T1D, pak na obr. 03-14 je uveden rozklad těchto funkcí v součinu. Odpovídající vzorce jsou pak vyjádřeny vztahy (0307) a (0.308). a 0 0 1 1
b 0 1 0 1
f 0 1 1 0
=
a 0 0 1 1
b 0 1 0 1
f0 0 1 1 1
*
a 0 0 1 1
b 0 1 0 1
f1 1 1 1 1
*
a 0 0 1 1
b 0 1 0 1
f2 1 1 1 1
*
a 0 0 1 1
b 0 1 0 1
f3 1 1 1 0
Obr. 03-14 Součin - rozklad funkce f = f0 * f1 * f2 * f3
(0307)
f = f0 * f3
(0308)
U logického součtu má hodnotu 0 pouze jedna kombinace vstupů a zbývající kombinace mají hodnotu 1. Proto nejjednodušší funkce f0 a f3 mohou být vyjádřeny pomocí maxtermů. Maxterm pro funkci f0 je a + b a Maxterm pro funkci f2 je a’ + b’. Po dosazení Maxtermů do vzorce (0308), získáme nový vztah, (0309), f(a, b) = (a + b) (a’+ b’)
(0309)
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ů. 𝑓(𝑥𝑛−1 … 𝑥1 , 𝑥0 ) = ∑ 𝑚𝑖
(0310)
𝑓(𝑥𝑛−1 … 𝑥1 , 𝑥0 ) = ∏ 𝑀𝑖
(0311)
Kde
f(xn-1,… x1, x0) je Booleovská funkce v definovaném pořadí vstupních proměnných. mi jsou mintermy. Mi 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
Kanonická normální forma
3. Booleova algebra popisuje hodnotu X. Vztah (0310) se používá pro zápis pomocí mintermů a vztah (0311) pro zápis pomocí Maxtermů. 𝑓(𝑥𝑛−1 … 𝑥1 , 𝑥0 ) = ∑ 𝑚(𝑖, 𝑗, … ) + ∑ 𝑑(𝑘, 𝑙, … )
(0310)
𝑓(𝑥𝑛−1 … 𝑥1 , 𝑥0 ) = ∏ 𝑀(𝑜, 𝑝, … ) ∗ ∏ 𝐷(𝑟, 𝑠, … )
(0311)
Kde
f(xn-1 … x1, x0) 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. 03-15 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ě. 𝑓(𝑎, 𝑏, 𝑐) = ∑ 𝑚(1, 2, 5) + ∑ 𝑑(3, 6)
(0312)
𝑓(𝑎, 𝑏, 𝑐) = ∏ 𝑀(0, 4, 7) ∗ ∏ 𝐷(3, 6)
(0313)
Index
a
b
c
f
Minterm
0
0
0
0
0
1
0
0
1
1
m1 = a´· b’· c
2
0
1
0
1
m2 = a’· b · c’
3
0
1
1
X
d3 = a’· b · c
4
1
0
0
0
5
1
0
1
1
m5 = a · b’· c
6
1
1
0
X
d6 = a · b · c’
7
1
1
1
0
Maxterm M0 = a + b + c
D3 = a + b´+ c´ M4 = a´+ b + c D6 = a´+ b´+ c M7 = a´+ b´+ c´
Obr. 03-15 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: F1(x, y, z) = D(1, 3, 4, 6) nebo F2(x, y, z) = K(0, 5, 6, 7). Vyjádření neúplné booleovské funkce je pak: F3(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 F1 nabývá hodnotu 1. Symbol K (konjunkce) značí soupis indexů, kde booleovská funkce F2 nabývá hodnotu 0. Pro neúplnou booleovskou funkci je zápis F3, kde indexy ve vnitřní závorce značí neurčitou hodnotu X. VŠB-TU Ostrava
26
Čí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 0 0 1 1 0 1 1 1 1 0 0 0 1 1 0 1 Příklad 2: Sestavte pravdivostní tabulku pro výstupní booleovskou funkci F = ab' + a'c Výsledek: a 0 0 0 0 1 1 1 1
b 0 0 1 1 0 0 1 1
c 0 1 0 1 0 1 0 1
a´ 1 1 1 1 0 0 0 0
b´ 1 1 0 0 1 1 0 0
ab' 0 0 0 0 1 1 0 0
a'c 0 1 0 1 0 0 0 0
F = ab' + a'c 0 1 0 1 1 1 0 0
Příklad 3: •
• •
•
Jsou dány výstupní funkce v kanonickém součtu F1(A,B,C) = Σmi (1, 2, 3, 5); F2’(A,B,C) = Σmi (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: F1(A,B,C) = ΠMi (0 ,4, 6, 7); F2’(A,B,C) = ΠMi (1, 2, 3, 5); Jsou dány výstupní funkce v kanonickém součinu F1(A,B,C) = ΠMi (0, 4, 6, 7); F2’(A,B,C) = ΠMi (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: F1(A,B,C) = Σmi (1, 2, 3, 5); F2’(A,B,C) = Σmi (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) = Σmi (1, 2, 3, 4, 5, 6) Kanonický součin k výše uvedené funkci pak je f(a,b,c) = ΠMi (0, 7, 8, 9, 10, 11, 12, 13, 14, 15)
VŠB-TU Ostrava
27
3. Booleova algebra
3.5 Reference [Roth_2004]
Charles H. Roth, Jr.: Fundamentals of Logic Design; Thomson, Brooks/Cole 2004; ISBN 0-534-37804-8
[wiki_0301]
Boolean algebra; http://en.wikipedia.org/wiki/Boolean_algebra; on line 2014-10-21
[wiki_0302]
Boolean function; http://en.wikipedia.org/wiki/Boolean_function; on line 2014-10-21
[wiki_0303]
Canonical normal form; http://en.wikipedia.org/wiki/Canonical_normal_form; on line 214-10-21
[wiki_0304]
Truth table; http://en.wikipedia.org/wiki/Truth_table; on line 2014-10-21
VŠB-TU Ostrava
28
Čí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 Syntéza 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 Kombinační logika 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 logicSchéma zapojení kých hradel a spojnic, obr. 04-01. 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. 04-01 vidíme kombinační logiku 3 úrovně.
a
b’
y
c
y = a((b’c)cb’) b’
c Obr. 04-01 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.
a
Dvou-úrovňová logika
y
b c’
y = a + b c’
Kritéria minimalizace
Obr. 04-02 Schéma zapojení pomocí dvou-úrovňové logiky
VŠB-TU Ostrava
29
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. 04-02. 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;
VŠB-TU Ostrava
Hradlo NOT
30
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Pravdivostní tabulka a 0 1
Karnaughova mapa a
Schématická značka y
a
y 1 0
1
0
Obr. 04-03 Hradlo NOT
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;
Pravdivostní tabulka a b y 0 0 0 0 1 0 1 0 0 1 1 1
Karnaughova mapa a
b
0
0
0
1
Hradlo AND
Schématická značka a b
y
Obr. 04-04 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 Hradlo OR 0.
Logický součet je roven 0, když vstupy “a” a současně i “b” jsou rovny 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; 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
4. Návrh Booleovské funkce Pravdivostní tabulka a b y 0 0 1 0 1 1 1 0 1 1 1 0
Karnaughova mapa a
b
0
1
1
1
Schématická značka a b
y
Obr. 04-05 Hradlo OR 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:
Hradlo NAND
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.
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; Hradlo NAND nesplňuje If (a == 0 | b == 0) z = 1 else z = 0; asociativní zákon
Pravdivostní tabulka a b y 0 0 1 0 1 1 1 0 1 1 1 0
Karnaughova mapa a
b
1
1
1
0
Schématická značka a b
y
Obr. 04-06 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 Hradlo NOR 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.
VŠB-TU Ostrava
32
Čí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;
Pravdivostní tabulka a b y 0 0 1 0 1 0 1 0 0 1 1 0
Karnaughova mapa a
b
1
0
0
0
Hradlo NOR nesplňuje asociativní zákon
Schématická značka a b
y
Obr. 04-07 Hradlo NOR 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 0 0 0 0 1 1 1 0 1 1 1 0
Karnaughova mapa a
ba+ 1
0 1Z 1Z zá0
Schématická značka a b
y
záObr. 04-08 Hradlo XOR
Poznámka k operaci XOR
Operace XOR odpovídá matematickému součtu modulo 2. Například 1 ⊕ 0 ⊕ 0 ⊕ 1 ⊕ 1 = 1 □
VŠB-TU Ostrava
33
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;
Pravdivostní tabulka a b y 0 0 1 0 1 0 1 0 0 1 1 1
Karnaughova mapa a
b
1
0
0
1
Hradlo XNOR
Schématická značka a b
y
Obr. 04-09 Hradlo XNOR
4.2 Syntéza 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. 04-10. 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
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO y = cba M(0, 4, 6) = M0 + M4 + M6 y = (c + b + a) (c’ + b + a) (c’ + b’+ a) = T8DT2D
= (c.c’ + b + a) (c’ + a + b.b’)
Teorémy T4D a T1
y = (b + a) (c’ + a) Obr. 04-10 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 2n, kde n je počet booleovských proměnných. Karnaughovy mapy pro 1, 2, 3 a 4 proměnné jsou zobrazené na obr. 04-11. Více informací o Karnaughových mapách naleznete v literatuře [wiki_0413], [Fristacky_1986], [Warkley_2006], [Roth_2004] a [Katz_ Borriello_2005]. 1 proměnná
2 proměnné
a 0
3 proměnné
a
1
b
0
1
2
3
c
b
a
0
1
3
2
4
5
7
6
Počet buněk je dán mocninou 2
4 proměnné
b
a
Karnaughova mapa
c d
0
1
3
2
4
5
7
6
12
13
15
14
8
9
11
10
Obr. 04-11 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):593-599, November 1953; Generalized quicksearch for expert systems, in Proc. Artificial Intelligence for Applications, pp. 30–34. 1992
VŠB-TU Ostrava
35
4. Návrh Booleovské funkce Každá buňka má svůj minterm a maxterm
Poznámka ke značení Karnaughových map
c d
b
a
b
a 0
1
3
2
4
5
7
6
12
13
15
14
8
9
11
10
Proměnná a má hodnotu 1
c
Proměnná a má hodnotu 0
d
0
1
3
2
4
5
7
6
12
13
15
14
8
9
11
10
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. 04-12. 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). 𝑓(𝑥𝑛−1 … 𝑥1 , 𝑥0 ) = ∑ 𝑚(𝑖, 𝑗, … ) + ∑ 𝑑(𝑘, 𝑙, … )
(0401)
𝑓(𝑥𝑛−1 … 𝑥1 , 𝑥0 ) = ∏ 𝑀(𝑜, 𝑝, … ) ∗ ∏ 𝐷(𝑟, 𝑠, … )
(0402)
Kde
f(xn-1 … x1, x0) 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“. 𝑓(𝑐, 𝑏, 𝑎) = ∑𝑚(2, 4, 6) + ∑𝑑(1, 3) 𝑓(𝑐, 𝑏, 𝑎) = ∏𝑀(0, 5, 7) + ∏𝐷(1, 3)
Index 0 1 2 3 4 5 6 7
VŠB-TU Ostrava
c 0 0 0 0 1 1 1 1
b 0 0 1 1 0 0 1 1
a 0 1 0 1 0 1 0 1
f 0 X 1 X 1 0 1 0
b
a
c
0
0
1
X
3
1
2
X
4
1
5
0
7
0
6
1
Obr. 04-12 Zápis z booleovské funkce do Karnaughovy mapy 36
Čí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ě Sousední buňky 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. 04-13. 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. 04-13.
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. 04-13. d'c'b + d'c b = d' b Stejně tak je možné použít výše uvedené kroky i pro Maxtermy, obr. 04-13. Buňky s indexy 4 a 6 jsou sousední a můžeme použít teorém T10D. (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) b
a 0
c
d
1
b
a
31 2 1
4
5
71 6 X
12
13
15
14
8
9
11
10
d’c’b d’cb
c
d’b d
0
1
3
2
4
0 12 0
5
7
6
13
15
8
9
11
X 14 0 10
d + c’ + a c’ + a d’ + c’ + a
Obr. 04-13 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
Součinový tvar
4. Návrh Booleovské funkce Pro součinový term platí:
Pravidla pro seSmyčka musí pokrývat všechny buňky s hodnotou 1, v případě potřeby je možné postavení součinoužít do smyčky i buňky s hodnotou X. vého termu 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í.
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é Pravidla pro sepoužít do smyčky i buňky s hodnotou X. stavení součtoV případě, že smyčka se vztahuje pouze na oblasti v mapě, kde je proměnná 0, pak je vého termu 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á.
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 2i 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. Minimalizace pro součtovou formu Vytvořte součtový tvar. f(d, c, b, a) = ∑m(2, 3, 6, 10) + ∑d(1, 7, 9, 11, 14)
VŠB-TU Ostrava
(0403)
38
Čí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. 04-14 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)
0 0 0 0
c
b
a 0
d
0 1X 31 21
c 40 50 7X 61 8
0
9
X
X 0 0 X
1 X 0 X b
a
Minimalizace má 4 možnosti
c d
120 13 0 15 0 14X
d
b
a
f(d, c, b, a) = ∑m(2, 3, 6, 10) + ∑d(1, 7, 9, 11, 14)
0 0 0 0
11 X 101
X 0 0 X
1 X 0 X
b
c d
0 0 0 0
X 0 0 X
1 X 0 X
1 1 X 1
c d
0 0 0 0
X 0 0 X
1 1 X 1
Součinové termy a’b bd’ ac’
b
a a
1 1 X 1
1 X 0 X
1 1 O X 1
bc’
Minimalizace pro součtovou formu.□
Obr. 04-14 Minimalizace pro součtovou formu
a b d’
f1
f1 = a’b + bd’
b Kombinační obvod AND-OR
Obr. 04-15 Schéma dvou-úrovňového kombinačního obvodu AND-OR VŠB-TU Ostrava
39
4. Návrh Booleovské funkce Jedno možné zapojení logického obvodu pro danou booleovskou funkci je na obr. 04-15. 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. Minimalizace pro součinovou formu Vyjádřete součinové termy zbývajících smyček. Vytvořte součinový tvar.
Součtové termy
f(d, c, b, a) = ∑m(2, 3, 6, 10) + ∑d(1, 7, 9, 11, 14) b
a
a 0
c
b
0 1X 31 21
c 40 50 7X 61
d
Minimalizace má 3 možnosti
120 13 0 15 0 14X
d
8
0 0 0 0
d b
a c d
0 0 0 0
X 0 0 X
1 X 0 X
1 X 0 X
0 0 0 0
X 0 0 X
1 1 X 1
1 X 0 X
b
a’+ c’
b
a c
0 9 X 11 X 101
X 0 0 X
1 1 X 1
1 1 X 1
c’ + d’
a’ + d’
Obr. 04-16 Minimalizace pro součinovou formu Minimalizace pro součinový tvar je představen na obr. 04-16 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
Čí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. 04-17. Pro realizaci jsou vybrána logická hradla OR a AND. Schéma zapojení kombinační obvodu pro danou booleovskou funkci je na obr. 04-17. 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. b d’
f6
f6 = b (c’+ d’)
c’ Kombinační obvod AND-OR
Obr. 04-17 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. 2. 3. 4.
F1(c, b, a) = ∑mi(0,2,5,7) F2(c, b, a) = ∑mi(0,2,7) + ∑di(3,6) F3(c, b, a) = Π Mi (1,3,5,7) F3(c, b, a) = Π Mi (0,1,7)· Π Di (4,5)
Výsledek: F1 = a´c´+ ca Výsledek: F2 = a´c´+ b Výsledek: F3 = c´ Výsledek: F4 = 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. 2. 3. 4.
F1(c, b, a) = ∑mi(0,2,5,7) F2(c, b, a) = ∑mi(1,3,6,7) + ∑di(2,5) F3(c, b, a) = Π Mi (1,3,5,7) F3(c, b, a) = Π Mi (0,6)· Π Di (4,7)
Výsledek: F1 = a´c´+ ca Výsledek: F2 = a+b Výsledek: F3 = c´ Výsledek: F4 = 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. 2. 3. 4.
F1(c, b, a) = ∑mi(0,2,3,4) F2(c, b, a) = ∑mi(1,2,5) + ∑di(3) F3(c, b, a) = Π Mi (4,5,7) F4(c, b, a) = Π Mi (0,4)· Π Di (2,5)
VŠB-TU Ostrava
Výsledek: F1 = c´b+b´a´; F1 = (c´+b´)(b+a´); Výsledek: F2 = c´b+b´a; F2 =(c´+b´)(b+a); Výsledek: F3 = c´+ba´; F3 = (c´+b)(c´+a´); Výsledek: F4 = b+a; F4 =(b+a); 41
4. Návrh Booleovské funkce 5. F5(d,c, b, a) = ∑mi(3,5,11,12,13) + ∑di(2,4,7,10,15) Výsledek: F5 = ab + b´c; F5 =(b+c)(b´+a); 6. F6(d,c, b, a) = Π Mi (0,4,5,10,11,12) + Π Di (2,3,7) Výsledek: F6 = bc + ac´d´+ b´c´d +acd; F6 =(b´+c)(a+c+d)(b+c´+d)(a+b+c´); 7. F7(d,c, b, a) = ∑mi(0,2,3,4,6,7,8,10,11,12,14,15) Výsledek: F7 = a´+b; F7 = (a´+b); 8. F8(d,c, b, a) = Π Mi (0,1,2,3,10,11,15) Výsledek: F8 = cd´+ac´+b´d; F8 = (b´+c)(c+d)(a´+b´+d´); 9. F9(d,c, b, a) = ∑mi(1,5,9,13) + ∑di(3,8,15) Výsledek: F9 = a+b´; F9 =(a+b´); 10. F10(d,c, b, a) = Π Mi (2,3,6,7,8,12) + Π Di (1,5,10,14) Výsledek: F10 = ad+b´d´; F10 =(b´+d)(a+d´); 11. F11(d,c, b, a) = Π Mi (2,5,6,9,10,14) + Π Di (8,12) Výsledek: F11 = a´b´+ab+ac´d´+acd; F11 =(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: ̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅ ̅̅̅̅̅̅ ) ̅̅𝑏 ̅̅̅) . (𝑏𝑑 𝑓1 = 𝑎̅𝑏 + 𝑏𝑑̅ = ̿̿̿̿̿̿̿̿̿̿̿ 𝑎̅𝑏 + 𝑏𝑑̅ = (𝑎 Výsledkem je vztah, který obsahuje pouze NAND operace. Schéma zapojení kombinačního obvodu realizovaného pouze hradly NAND je na obr. 04-18.
.
(ab) 1st NAND
(bd)
f1 = a’b + b’d
a’ 1
b
2nd NAND
3
b d’
2
3rd NAND
f1 Kombinační obvod NAND - NAND
Obr. 04-18 Kombinační obvod – NAND - NAND VŠB-TU Ostrava
42
Čí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: ̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅ 𝑓6 = 𝑏 (𝑐̅ + 𝑑̅ ) = ̿̿̿̿̿̿̿̿̿̿̿̿ 𝑏 (𝑐̅ + 𝑑̅) = 𝑏̅ + (𝑐̅̅̅̅̅̅̅̅̅ + 𝑑̅) 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. 04-19.
b
+
b’
(c + d) 1st NOR
2
c’ d’
1
2nd NOR
f6 f6 = b (c’+ d’) Kombinační obvod NOR - NOR
Obr. 04-19 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. 04-20 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 ‘1’ when d=’0’and c=’0’ and b=’1’ and a=’0’ else -- index ‘1’ when d=’0’and c=’0’ and b=’1’ and a=’1’ else -- index ‘0’ when d=’0’and c=’1’ and b=’0’ and a=’0’ else -- index ‘0’ when d=’0’and c=’1’ and b=’0’ and a=’1’ else -- index ‘1’ when d=’0’and c=’1’ and b=’1’ and a=’0’ else -- index ‘0’ when d=’1’and c=’0’ and b=’0’ and a=’0’ else -- index ‘1’ when d=’1’and c=’0’ and b=’1’ and a=’0’ else -- index ‘0’ when d=’1’and c=’1’ and b=’0’ and a=’0’ else -- index ‘0’ when d=’1’and c=’1’ and b=’0’ and a=’1’ else -- index ‘0’ when d=’1’and c=’1’ and b=’1’ and a=’0’ else -- index ‘X’ when others; -- remaining indexes end architecture Data_Flow;
0 2 3 4 5 6 8 10 12 13 14
Obr. 04-20 VHDL – zápis neúplné Booleovské funkce
Pro minimalizaci booleovské funkce pomocí algoritmů jsou známy dva algoritmy - QuineMcCluskey 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
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é Algoritmus výběru sady tzv. nevyhnutelných implikantů. Jde o tabulkovou metodu, kterou lze lehce pře- Quine-Mc vést do příkazů programovacího jazyka. Více informací je v literatuře [Warkley_2006], Clusky [Katz_Borriello_2005], [Roth_2004], [wiki_0411] and [Fristacky_1986].
Algoritmus Espresso je program minimalizace Booleovské funkce, který vede k dvouAlgoritmus úrovňové realizaci, byl vyvinutý na University of California v Berkeley, a dnes je souEspresso čá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 1-55860-798-6 [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 0-201-30857-6 [Koren_2008] Israel Koren: Computer Arithmetic Algorithms; A. K. Peters 2008; ISBN 1-56881-160-8 [Roth_2004]
Charles H. Roth, Jr.: Fundamentals of Logic Design; Thomson 2004, ISBN 0534-37804-8
[Warkley_2006] Jon F. Warkley: Digital Design, Principles and Practices, Fourth Edition; Prentice Hall 2006, ISBN 0-13-186389-4 [wiki_xx01]
Logic synthesis; http://en.wikipedia.org/wiki/Logic_synthesis; on line 201410-21
[wiki_0402]
Circuit diagram; http://en.wikipedia.org/wiki/Circuit_diagram; on line 201411-05
[wiki_0403]
Combinational logic; http://en.wikipedia.org/wiki/Combinational_logic; on line 2014-11-05
[wiki_0404]
Inverter (logic gate); http://en.wikipedia.org/wiki/Inverter_(logic_gate); on line 2014-11-05
[wiki_0405]
AND gate; http://en.wikipedia.org/wiki/AND_gate; on line 2014-11-05
[wiki_0406]
OR gate; http://en.wikipedia.org/wiki/OR_gate; on line 20104-11-05
[wiki_0407]
NAND gate; http://en.wikipedia.org/wiki/NAND_gate; on line 2014-11-05
VŠB-TU Ostrava
44
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO [wiki_0408]
NOR gate; http://en.wikipedia.org/wiki/NOR_gate; on line 2014-11-05
[wiki_0409]
XOR gate; http://en.wikipedia.org/wiki/XOR_gate; on line 2014-11-05
[wiki_0410]
XNOR gate; http://en.wikipedia.org/wiki/XNOR_gate; on line 2014-11-05
[wiki_0411]
Quine–McCluskey algorithm; http://en.wikipedia.org/wiki/Quine%E2%80%93McCluskey_algorithm; on line 2014-11-11
[wiki_0412]
Espresso heuristic logic minimizer; http://en.wikipedia.org/wiki/Espresso_heuristic_logic_minimizer; on line 2014-11-11
[wiki_0413]
Karnaugh map; http://en.wikipedia.org/wiki/Karnaugh_map; on line 201411-11
VŠB-TU Ostrava
45
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 ℝ. 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/23 jsou racionální čísla, která zapisujeme jako 0.25, b0.101. 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ř. 0.333….). Množina racionálních čísel je označena tučně Q nebo ℚ. 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. 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 ℤ. 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 ℕ. 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.
VŠB-TU Ostrava
46
ℝ, reálná čísla jsou např.: +1; -1; +1.41; -5467.01; …
ℚ, 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 např.: …-2; -1; 0; +1; +2…
ℕ, přirozená čísla jsou např.: 0; +1; +2… nebo +1; +2…
Čí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, ℤ. o celá čísla bez znaménka odpovídají přirozeným číslům, což je množina ℕ = {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] http://perso.ens-lyon.fr/jean-michel.muller/chapitre1.pdf; on line 2014-0629 [Intel_0501]
http://www.intel.com/support/processors/pentium/sb/CS-012748.htm; on line 2013-06-10
[Janeba_1995] M. Janeba: The Pentium Problem; http://www.willamette.edu/~mjaneba/pentprob.html, on line 2013-06-10 [Microsoft_0501] http://blogs.office.com/b/microsoft-excel/archive/2007/09/25/calculation-issue-update.aspx, on line 2013-06-12 [Microsoft_0502] http://blogs.msdn.com/excel/archive/2007/10/09/calculation-issue-update-fix-available.aspx, on line 2013-06-12 [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 978-0-8176-4704-9; e-ISBN 978-0-8176-4705-6 [Rump_1988] S. M. Rump. Algorithms for verified inclusion. In R. Moore, editor, Reliability in Computing, Perspectives in Computing, pages 109–126. Academic Press, New York, 1988. [wiki_0501]
Real number; http://en.wikipedia.org/wiki/Real_number; online 2013-06-07
[wiki_0502]
Rational number; http://en.wikipedia.org/wiki/Rational_number; on line 2013-06-07
[wiki_0503]
Irrational number; http://en.wikipedia.org/wiki/Irrational_number; on line 2013-06-07
[wiki_0504]
Integer http://en.wikipedia.org/wiki/Integer; on line 2013-06-07
VŠB-TU Ostrava
47
5. Reálná čísla [wiki_0505]
Number; http://en.wikipedia.org/wiki/Number; on line 2014-06-23
[wiki_0506]
Natural line; http://en.wikipedia.org/wiki/Natural_number; on line 2014069-23
[wiki_0507]
Pentium bug; http://en.wikipedia.org/wiki/Pentium_Bug; on line 2013-0610
[wiki_0508]
Guard digit; http://en.wikipedia.org/wiki/Guard_digit; on line 2014-08-21
[wiki_0509]
Number line; http://en.wikipedia.org/wiki/Number_line; on line 2014-08-21
[wiki_0510]
Real line; http://en.wikipedia.org/wiki/Real_line; on line 2014-08-21
VŠB-TU Ostrava
48
Čí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 Celá čísla obsahují soustavou a velikostí slova. Konečná velikost slova způsobuje omezený rozsah vyjádření přirozená čísla a celého čísla. Celá čísla používají znaménko plus nebo mínus. Tento znak nepatří mezi číslice v záporná čísla číselné soustavě, nicméně existují způsoby jak znak znaménka vyjádřit. 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 Množina přirozezáporná čísla zastoupena především dvojkovým doplňkem a dalšími možnými způ- ných čísel je {0, +1, +2, +3 …} soby zobrazení.
•
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: 1999. 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++ 2011 [cppref_0601] a [Microsoft_0601].
VŠB-TU Ostrava
49
6. Celá čísla
6.1 Celá čísla bez znaménka
Rozsah celého čísla Jedná se o čísla bez znaménka a tedy o nezáporná čísla, která tvoří následující sadu čísel {0, bez znaménka je 0 až 1, 2…}. V informatice mají takováto čísla v binární číselné soustavě omezený rozsah, který je 2n - 1 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. 06-01. 0 do 2n - 1
(0601)
kde
n je počet bitů ve slově
MSB
LSB
n-1
0
1
1
0
1
0
0
1
1
Pro 8 bitů je rozsah zobrazení od 0 do 255 Potom číslo 129D lze do 8 bitů zobrazit jako 1000 0001B.
Obr. 06-01 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++ 2011 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í Signed Integer 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 Celé číslo se problém s počtem nul. Některé techniky zobrazují dvě nuly – kladnou a zápornou, jiné jen znaménkem 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;
VŠB-TU Ostrava
50
Čí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++2011 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í Sign and bit, ve většině případů se jedná o bit MSB. Slovo je rozděleno na dvě části, první část je určena magnitude 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 Přímý kód zápornou. Rozsah zobrazení je dán vztahem (0602) a typická organizace slova je znázorněna na obr. 06-02, literatura [wiki_1102]. Rozsah přímého kódu -(2n-1-1) do + (2n-1-1) (0602) -(2n-1 - 1) až +(2n-1 - 1) Kde
n je počet bitů ve slově.
MSB n-1 0 1
0
1
0
0
LSB 0 1 1
Absolutní hodnota
Znaménko
Pro 8-bitů je rozsah od -127 do + 127 Číslo +11D je zakódováno jako 0000 1011B Číslo -11D je zakódováno jako 1000 1011B Kladná nula (+0) je 0000 0000B Záporná nula (-0) je 1000 0000B
Obr. 06-02 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 = 2n-1+ A
(0603)
SM
A = 2n-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ŠB-TU Ostrava
Výsledek: (0110 1110)2 51
6. Celá čísla b) c) d) e) f)
(-110)10 (51)10 (-51)10 (85)10 (-85)10
Výsledek: (1110 1110)2 Výsledek: (0011 0011)2 Výsledek: (1011 0011)2 Výsledek: (0101 0101)2 Výsledek: (1101 0101)2
6.4 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. 06-03. Pro kladné číslo je znaménkový bit roven 0 a v případě záporného čísla je roven 1. 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]. 1
A = 2n - 1 - A
(0605)
1
(0606)
-(2n-1-1) do + (2n-1-1)
(0607)
A=~A
Rozsah jednotkového doplňku -(2n-1 - 1) až +(2n-1 - 1)□
Jednotkový doplněk 1 A= 2n- 1 - 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 n-1 00 11 00 11
LSB 0 00 00 11 11
Pro 8-bitů je rozsah od -127 do + 127 Číslo +11D je kódováno jako 0000 1011B
Číslo -11D je kódováno jako 1111 0100B Kladná nul (+0) je 0000 0000B
Znaménko
Záporná nula (-0) je 1111 1111B
Obr. 06-03 Jednotkový doplněk Příklady Vyjádřete v inverzním kódu následující dekadická čísla (v 8 bitech): a) (110)10 b) (-110)10 c) (51)10 VŠB-TU Ostrava
Ones‘ complement□
Výsledek: (0110 1110)2 Výsledek: (1001 0001)2 Výsledek: (0011 0011)2 52
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO d) (-51)10 e) (85)10 f) (-85)10
Výsledek: (1100 1100)2 Výsledek: (0101 0101)2 Výsledek: (1010 1010)2
6.5 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-bi- Two’s complement □ tové slovo, literatura [wiki_0602] a [wiki_0604]. MSB je znaménkový bit, který je roven 1 pro záporné číslo a 0 pro kladné číslo, viz obr. 06-04. 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 = 2n - A
2
(0608)
1
A = A + 1 = ~A + 1
(0609)
-(2n-1) do + (2n-1 - 1)
(0610)
Dvojkový doplněk 2 A= 2n- A 2 A = 1A + 1 = ~A + 1□
Kde • • • • •
2
A - je označení dvojkového doplňku; 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 1
MSB n-1 0 1
0
1
0
0
LSB 0 1 1
Pouze jedná nula, kladná nula□
Rozsah dvojkového doplňku -(2n-1) až + (2n-1 - 1) □
Pro 8-bitů je rozsah od -128 do +127 Číslo +11D je kódováno jako 0000 1011B Číslo -11D je kódováno jako 1111 0101B
Znaménko 0 mínus 1 plus
Pouze jedna nula 0000 0000B (kladná)
Obr. 06-04 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
6. Celá čísla Vyjádřete v doplňkovém kódu následující dekadická čísla (v 8 bitech): a) b) c) d) e) f)
(110)10 (-110)10 (51)10 (-51)10 (85)10 (-85)10
Výsledek: (0110 1110)2 Výsledek: (1001 0010)2 Výsledek: (0011 0011)2 Výsledek: (1100 1101)2 Výsledek: (0101 0101)2 Výsledek: (1010 1011)2
6.6 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. 06-05. 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ů:
50D = 0011 0010B Not B, jednotkový doplněk: 1100 1101B Plus 1 je: 1100 1110B -50D = 21100 1110B = 0xCE □
Not B plus 1 □
Obr. 06-05 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ů:
28 - 50D = 206D 206D = 1100 1110B = 0xCE -50D = 21110 1011B = 0xCE □
2n - A □
Obr. 06-06 Převod do dvojkového doplňku pomocí 2n – A Na obr. 06-06 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
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO
6.7 Převod z dvojkového doplňku 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. 06-07. 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 2n odečítá 2A. Vztah (0608), má význam "not B + 1", obr. 06-08. 8-bitový dvojkový doplněk 0x8C převeďte na dekadické číslo
0x8C = 1000 1100B Not B, je: 0111 0011B; 0x73 Plus 1 je: 0111 0100B, 0x74 0111 0100B = 74H = 7*16 + 4 = 116D Dvojkový doplněk: 28CH = -116D □
not (B) + 1 □
Obr. 06-07 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
2n = 0x100 2n - 2A = 0x100 – 0x08C =0x074 0x74 = 7 * 16 + 4 = 116D Dvojkový doplněk: 20x8C = -116D □
2n - 2A □
Obr. 06-08 Převod dvojkového doplňku do dekadické soustavy pomocí 2n - 2A 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. 06-09. 𝑛−2
−𝑎𝑛−1 2𝑛−1 + 𝑎𝑛−2 2𝑛−2 + ⋯ 𝑎0 20 = −𝑎𝑛−1 2𝑛−1 + ∑𝑖=0 𝑎𝑖 2𝑖 Kde
(0611) Polynom
ai je počet binárních číslic; n je počet bitů ve slově.
𝑛−2
−𝑎𝑛−1 2𝑛−1 + ∑𝑖=0 𝑎𝑖 2𝑖 □
8-bitový dvojkový doplněk 0x8C převeďte na dekadické číslo
0x8C = 1000 1100B
-1*27 + 0*26 + 0*25 + 0*24 + 1*23 + 1*22 + 0*21 + 0*20 =-128 + 12 = - 116
Dvojkový doplněk: 20x8C = - 116D□
Obr. 06-09 Převod dvojkového doplňku do dekadické soustavy pomocí polynomu VŠB-TU Ostrava
55
6. Celá čísla
6.8 Kód s posunutou nulou – offset binary
Kód s posunutou Kód s posunutou nulou má ekvivalentní anglické názvy – offset Binary, excess-K or biased nulou □ 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í Offset binary hodnotě offset binary, literatura [wiki_0602] a [wiki_0605]. Základní princip binárního posuvu je znázorněn na obr. 06-10. Tento princip zobrazení záporných čísel se používá v D/A Excess-K □ nebo A/D převodníku a v pohyblivé řádové čárce pro zobrazení exponentu. Minimální číslo
Biased number □
Maximální číslo
Číselná osa Plus nekonečno
Posuv, b
Offset binary
2n-1
0 Pro n-bitové zobrazení
Obr. 06-10 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 2n-1-1 se používá při zobrazení čísel v pohyblivé řádové čárce podle IEEE 754, [IEEE 754-2008]. Rozsah zobrazení čísla v offset binary je dán vztahem (0613). B
A=A+b
Biased exponent v pohyblivé řádové čárce je tento kód □
(0612)
-(b) do +(2n – 1 - b)
(0613)
Kde
A je posunuté číslo a musí být přirozeným číslem ℕ, (BA ≥ 0); Posunuté číslo BA A je celé číslo, pro které se binární posuv vypočítává. Číslo A je kladné nebo záporné; je celé číslo bez b je posuv (také označován jako offset nebo bias), ve standardu IEEE 754 pro pohybznaménka □ livou řádovou čárku je bias 2n-1 - 1, pro n-bitový exponent. B
Dekadické číslo + 127 + 126 : +1 0 -1 : -127 -128
Offset Binary pro 8 bitů 1111 1111 1111 1110 : 1000 0001 1000 0000 0111 1111 : 0000 0001 0000 0000
Dvojkový doplněk 0111 1111 0111 1110 : 0000 0001 0000 0000 1111 1111 : 1000 0001 1000 0000
Posuv b je 128 Rozsah zobrazení - b do + (2n -1 - b)
Posuv je 2n-1 □
Pro 8 bitové slovo je rozsah -128 to +127
Obr. 06-11 Vztah mezi offset binary s posunutím 128 a dvojkovým doplňkem VŠB-TU Ostrava
56
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Definice posuvu 2n-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. 06-11. 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 + 128 + 127 : +1 0 -1 : -126 -127
Binární posuv pro 8 bitů 1111 1111 1111 1110 : 1000 0000 0111 1111 0111 1110 : 0000 0001 0000 0000
Dekadická hodnota binárního posuvu 255 254 : 128 127 126 : 1 0
Bias b je 127 Posuv je 2n-1 - 1 □
Rozsah zobrazení - (2n-1-1) to + (2n-1) Pro 8 bitové slovo je rozsah - 127 to +128
Obr. 06-12 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 8bitovém poli, které je použité v 32-bitovém slovu zobrazující číslo v pohyblivé řádové čárce je uvedeno na obr. 06-12. -(2n-1-1) do +(2n-1)
(0614)
Kde
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), BA = A + b. Tento vztah může být použit pro kteroukoli číselnou soustavu, viz příklad na obr. 06-13.
Když b= 127 Když b = 127
A = +38 A = -38 B A = 240 B A = 14
B
A = 165 B A = 89 A = 113 A = -113
Výpočet B A = 38 + 127 = 165 B A = -38 +127 = 89 A = 240 – 127 = 113 A = 14 - 127 = - 113
Použitý vzorec B
A=A+b
A = BA - b
Obr. 06-13 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ŠB-TU Ostrava
Výsledek: (1110 1101)2 57
Bias 2n-1 - 1 je používán pro vyjádření exponentu v pohyblivé řádové čárce. □
6. Celá čísla b) c) d) e) f)
(-110)10 (51)10 (-51)10 (85)10 (-85)10
Výsledek: (0001 0001)2 Výsledek: (1011 0010)2 Výsledek: (0100 1100)2 Výsledek: (1101 0100)2 Výsledek: (0010 1010)2
6.10 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- Binary-coded Decimal □ čovém světě, zde je však omezení pro zobrazované číslo na konečnou délku slova. Jak 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 0 1 2 3 4 5 6 7 8 9
BCD kód 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
Znaménko + + + Bez znaménka
Binární č. 1010 1011 1100 1101 1110 1111
Hex. č. A B C D E F
Preferováno Preferováno
Číslo v BCD kódu se umísťuje do nibblu (4-bitová skupina)□
Obr. 06-14 Definice BCD kódu
Kódování
Dekódování
691
0111100000110100
0110
1001
0111
1000
0011
0100
7
8
3
4
0001
011010010001
7834
Obr. 06-15 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. 06-14, 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 sku- Číslo v BCD kódu pina čtyř bitů se nazývá nibble a byte má 2 nibble. Když dekadické číslo má více řádů, pak formát řetězce každý dekadický řád je kódován zvlášť do jednoho nibble. Potom všechny nibbly jsou uspořá- string □
VŠB-TU Ostrava
58
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO dány vedle sebe a tvoří řetězec. Obr. 06-15 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 8-4-2-1. 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 8 + 4 + 1 a vyjádřeno v binárním kódu to odpovídá 1101. □ Čí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. 06-16. 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 15
1
LSB 0
0
0
1
0
0
1
1
0
1
0
1
1
1
0
1
Znaménko
Dekadické číslo je -935
Preferovaný kód pro znaménko Hex C - plus Hex D - mínus Hex F – bez znaménka
Packed format □
Obr. 06-16 Zhuštěný formát se znaménkem v 16-bitovém slově MSB 15
0
LSB 0
0
0
0
0
0
1
1
0
Dekadické číslo je +3
0
0
0
1
1
0 01
Znaménko
Preferovaný kód pro znaménko Hex C - plus Hex D - mínus Hex F – bez znaménka
Unpacked format □
Obr. 06-17 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. 06-16 a obr. 06-17. Tento princip je odvozen od účetního hlediska (C - Credit a D -Debet).
VŠB-TU Ostrava
59
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). Pro čísla bez znaménka
0 až (10n-1 - 1)
(0615)
Pro čísla se znaménkem
-(10n-1 - 1) až +(10n-1 - 1)
(0616)
Kde
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: (0001 0001 0000 1100) b) (-110)10 Výsledek: (0001 0001 0000 1101) c) (51)10 Výsledek: (0000 0101 0001 1100) d) (-51)10 Výsledek: (0000 0101 0001 1101) e) (85)10 Výsledek: (0000 1000 0101 1100) f) (-85)10 Výsledek: (0000 1000 0101 1100)
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: (0000 0001 0000 0001 0000 0000 0000 1100) h) (-110)10 Výsledek: (0000 0001 0000 0001 0000 0000 0000 1101) i) (51)10 Výsledek: (0000 0000 0000 0101 0000 0001 0000 1100) j) (-51)10 Výsledek: (0000 0000 0000 0101 0000 0001 0000 1101) k) (85)10 Výsledek: (0000 0000 0000 1000 0000 0101 0000 1100) l) (-85)10 Výsledek: (0000 0000 0000 1000 0000 0101 0000 1101)
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 = 9A + 1
(0617)
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 = 10n - A
VŠB-TU Ostrava
(0619)
60
10
A = 10n - A □
Čí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) b) c)
(-110)10 (-51)10 (-85)10
Výsledek: 10A = 890 Výsledek: 10A = 49 Výsledek: 10A = 15
6.12 Reference [DEC_VAX]
VAX780 Architecture handbook; Digital Equipment Corporation, 1977; (http://bitsavers.trailingedge.com/pdf/dec/vax/VAX_archHbkVol1_1977.pdf; on line 2013-09-24)
[DEC_PDP11]
PDP11 processor handbook, PDP11/04/34a/44/60/70; Digital Equipment Corporation, 1979; (http://bitsavers.informatik.unistuttgart.de/pdf/dec/pdp11/handbooks/PDP11_Handbook1979.pdf; on line 2013-09-24)
[cppref_0601] Fixed width integer types (since C++11); http://en.cppreference.com/w/cpp/types/integer; on line 2014-07-07 [IBM_370]
IBM System/370 Principles of Operation, IBM, March 1980
[IEEE 754-2008] IEEE Std 754™-2008, IEEE Standard for Interchange-Point Arithmetic, 29 August 2008, revision of IEEE 754 – 1985 [Internet_0601] Natural numbers; http://www.abstractmath.org/MM/MMNaturalNumbers.htm; on line 2014-07-07 [Microsoft_0601] XMINT4.XMINT4(int32_t, int32_t, int32_t, int32_t) constructor; http://msdn.microsoft.com/en-us/library/windows/desktop/hh404668(v=vs.85).aspx; on line 2014-07-07 [proofwiki_0601] Definition: Natural Numbers; https://proofwiki.org/wiki/Definition:Natural_Numbers; on line 2014-07-07
VŠB-TU Ostrava
61
6. Celá čísla [wiktionary_0601] Numeral numbers; http://en.wiktionary.org/wiki/natural_numbers; on line 2014-07-07 [wiki_0601] C data types; http://en.wikipedia.org/wiki/Inttypes.h#inttypes.h; on line 2013-09-18 [wiki_0602]
Signed number representations; http://en.wikipedia.org/wiki/Signed_number_representations; on line 2013-09-19
[wiki_0603]
Ones' complement; http://en.wikipedia.org/wiki/Ones%27_complement; on line 2013-09-19
[wiki_0604]
Two's complement; http://en.wikipedia.org/wiki/Two%27s_complement; on line 2013-09-19
[wiki_0605]
Offset binary; http://en.wikipedia.org/wiki/Offset_binary; on line 2013-09-22
[wiki_0606]
Binary-coded decimal; http://en.wikipedia.org/wiki/Binary-coded_decimal; on line 2013-09-22
[wiki_0607]
Method of complements; http://en.wikipedia.org/wiki/Method_of_complements; on line 2013-09-22
[wiki_0608]
Natural numbers; http://en.wikipedia.org/wiki/Natural_numbers; on line 2014-07-07
VŠB-TU Ostrava
62
Čí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 architek- Příznaky aritmetuře procesoru a výrobci. Základní příznaky jsou: negative – záporné číslo, zero – nulový vý- tických operací □ 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 2n-1 a pro dvojkový doplněk je od (2n-1-1) do + (2n-1-1). □
VŠB-TU Ostrava
63
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.
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. 07-01. 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.
1
1
1
1
1
1
1
1
1
1
0
1
1
0
1
1
1
1
0
1
1
0
1
1
Znaménkové rozšíření Obr. 07-01 Znaménkové rozšíření
VŠB-TU Ostrava
64
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 □
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO MSB 15
1
LSB 0
1
0
1
1
0
1
1
0
0
0
0
0
0
0
0
Aritmetický posuv o jedno místo doprava 1
1
1
0
1
1
0
1
1
0
0
0
0
0
0
0
Obr. 07-02 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. 07-02. 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 1 + 1 = 10B □ nesmí zapomenout, že 1 + 1 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. 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ů. S = A + B mod 2n
(0701)
Přenos je hodnota do dalšího bitu□
Kde
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ě.
Poznámka k binárnímu sčítání V dekadické číselné soustavě platí: V binární číselné soustavě platí: 1+1=2 1 + 1 = 10 2+1=3 10 + 1 = 11 3+1=4 11 + 1 = 100 : : V každém řádku hodnota výsledku musí být shodná u obou číselných soustav.
VŠB-TU Ostrava
65
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. 07-03. 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.
Binárně Operand A Operand B Součet S Přenos
0111 + 1001 0000 1
N=0, Z=1, V=0, C=1
Kontrola v dekadické soustavě Bez znaDvojkový ménka doplněk 7 7 + 9 + -7 0 0 Příznak N je MSB bit□
Obr. 07-03 Přenos u celých čísel bez znaménka
Obr. 07-04. 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 doPříznak Z je nataplňku, potom výsledek je chybný. Správný výsledek součtu je +9, který je mimo rozven, když výslesah zobrazení, a proto příznak V – overflow, přetečení je nastaven. Jedná se o situaci, dek je nulový □ 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 1100B + 1010B = 0110B. 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í.
Binárně Operand A Operand B Součet S Přenos
+
0111 0010 1001
N=1, Z=0, V=1, C=0
Kontrola v dekadické soustavě Bez znaDvojkový ménka doplněk 7 7 + 2 + 2 9 ?-7
0 Obr. 07-04 Přetečení v případě dvojkového doplňku
Obr. 07-05 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
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO 8-bitový operand A 8-bitový operand B Součet nižších nibblů
Carry in Operand A Operand B Součet S Přenos
+ 1
Binárně 0 1010 1001 0011
0100 1010 0010 1001 Součet vyšších nibblů
+ N=0, Z=0, V=1,C=1
Binárně 1 0100 0010 0111
0
N=0, Z=0, V=0,C=0
Obr. 07-05 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. A - B = A + (-B) = A + 2B = A + not B + 1
(0702)
Kde
A, B jsou binární operandy; 2 B je dvojkový doplněk B; not B je bitwise negace operandu B.
Binárně Operand A Operand B
0100 - 0010
Binárně >2-doplněk> Součet S Přenos
0100 + 1110 0010 1
N=0, Z=0, V=0, C=?
Kontrola v dekadické soustavě Číslo bez Dvojkový znaménka doplněk 4 +4 2 +2 2 2
Obr. 07-06 Odčítání Obrázky 07-06, 07-07 a 07-08 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
7. Aritmetické operace pro celá čísla
Binárně Operand A Operand B
0100 - 0110
Kontrola v dekadické soustavě Číslo bez Dvojkový znaménka doplněk 4 +4 6 +6 ?? -2
Binárně >2-doplněk> Součet S Přenos
0100 + 1010 1110 0
N=0, Z=0, V=0, C=?
Obr. 07-07 Odčítání, výsledek je záporné číslo
Binárně Operand A Operand B
0111 - 1010
Binárně >2-doplněk> Součet S Přenos
0111 + 0110 1101 0
N=0, Z=0, V=1, C=?
Kontrola v dekadické soustavě Číslo bez Dvojkový znaménka doplněk 7 +7 10 -6 ?? ??
Obr. 07-08 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 Sign and magni□ 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 tude 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. 07-09, 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. 07-10. Dekadické číslo se znaménkem : +2 +1 0 -1 -2 :
Přímý kód
Dvojkový doplněk
0010 0001 0000 1001 1010
0010 0001 0000 1111 1110
Obr. 07-09 Převod čísla do přímého kódu a do dvojkového doplňku
VŠB-TU Ostrava
68
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Kde
Když AS = 0, pak 2A=SA Když AS = 1, pak AS=0, 2A = not (SA) + 1
S
A je přímý kód čísla A AS je znaménko čísla v přímém kódu 2 A je dvojkový doplněk
Obr. 07-10 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. 07-11, 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.
Odčítání A-B Sčítání A+B
AS = BS
Kde
BS = not BS
F
T
AM > BM
F
T ❶ SM = AM + BM SS = AS
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. AS, BS, SS jsou znaménka operandů. AM, BM, SM jsou absolutní hodnoty operandů.
AM = BM
❷
T SM = 0 SS = 0
SM = AM - BM SS = AS
F ❹ SM = BM - AM SS = BS
Done Obr. 07-11 Algoritmus sčítání a odčítání v přímém kódu Příklady 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
7. Aritmetické operace pro celá čísla 1) 2) 3) 4) 5) 6)
A = 0011; B = 0100 A = 0101; B = 0111 A = 0111; B = 1001 A = 0111; B = 1010 A = 0011; B = 1010 A = 0110; B = 1010
Výsledek: (1011)2 = (-7)10; N = 1; Z = 0; V = 1; C = 0; Výsledek: (1100)2 = (-4)10; N = 1; Z = 0; V = 1; C = 0; Výsledek: (0000)2 = (0)10; N = 0; Z = 1; V = 0; C = 1; Výsledek: (0001)2 = (1)10; N = 0; Z = 0; V = 0; C = 1; Výsledek: (1101)2 = (-3)10; N = 1; Z = 0; V = 0; C = 0; 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, BA = A + b. Potom posunuté číslo Offset Binary a B A je přirozené číslo. V počítačové terminologii, posunuté číslo BA je celé číslo bez znaménka, excess-n jsou tedy číslo kladné. Sčítání a/nebo odčítání v excess-n je matematicky definováno vzorci (0703) identické termíny □ a (0704). Slovo matematicky znamená, že nenastane žádné přetečení. Příklad sčítání je uveden na obr. 07-12. B
Sum = (A + B) + b = BA + BB - b
(0703)
B
Sub = (A - B) + b = BA - BB + b
(0704)
B
A = A + b; BA ≥ 0□
Kde
Sum, BSub jsou výsledky v binárním posuvu a jsou to přirozená čísla, (BS ≥ 0); A, B jsou operandy; B A, BB jsou operandy v posuvu; b je bias, posuv; Při výpočtech nesmí nastat přetečení. B
Dekad. číslo 28 + 14 42 42
Operace → ADD bias → → ADD bias →
← SUB bias ←
Excessn dekadicky 41 27 68 13 55
→ →
←
Excessn binárně 10 1001 + 1 1011 100 0100 1101 11 0111
Pozn. Bias je 13, dekadicky Posunuté číslo je vždy bez znaménka □
Obr. 07-12 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 BA + BB, když výsledek je vyšší než 2n – 1, nebo o situaci odčítání BA – BB, 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 2n1 – 1. Pak vztahy (0706), (0707) a (0709) jsou platné pro posuv 2n-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
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Pro sčítání B
Sum = (BA + BB) + not (b) + 1, platí pro jakýkoli bias
(0705)
B
Sum = (BA + BB) + b + 2, platí pouze pro bias 2n-1-1
(0706)
B
Sum = (BA + BB) + 2n-1 + 1, platí pouze pro bias 2n-1-1
(0707)
Pro odčítání B
Sub = (BA + not(BB)) + 1 + b
(0708)
B
Sub = (BA + not(BB)) + 2n-1, platí pouze bias 2n-1- 1
(0709)
Kde
B
Sum je součet v n-bitovém binárním posuvu; Sub je rozdíl v n-bitovém binárním posuvu; B A, BB 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í; 2n-1 - 1 je bias pro pohyblivou řádovou čárku podle IEEE 754. B
Matematický důkaz pro BS = BA + BB + b + 2, kde b = 2n-1-1 Důkaz je platný pro n-bitové slovo 0 = 2n = 2*2n-1 – 2 + 2 = 2*(2n-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) = BA + BB + b + 2 Na obr. 07-13 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é číslo 4 + 3 7 7
Operace → ADD bias → → ADD bias →
← SUB bias ←
Excess-n dekadicky 11 10
14
→ →
←
Excess-n binárně 1011 + 1010 0101 + 1001 1110
Pozn.
Nastalo přetečení Not(b) + 1
Obr. 07-13 Příklad pro 4-bitové slovo kde bias je 2n-1- 1 = 7
VŠB-TU Ostrava
71
Posunuté číslo je vždy bez znaménka □
7. Aritmetické operace pro celá čísla Příklady Proveďte součet dvou čísel A, B v posunutí podle vztahu (0703), výsledek BSum vyjádřete dekadicky. Hodnota posunutí je bias =7. 1) 2) 3) 4)
Výsledek: BSum = 12 Výsledek: BSum = 9 Výsledek: BSum = 13 Výsledek: BSum = 1
A = 4; B = 3 A = 7; B = -5 A = -5; B = 11 A = -2; B = -4
Proveďte rozdíl dvou čísel A, B v posunutí podle vztahu (0704), výsledek rozdílu BSub vyjádřete dekadicky. Hodnota posunutí je bias =7. 1) 2) 3) 4)
7.7
Výsledek: BSub = 12 Výsledek: BSub = 15 Výsledek: BSub = 1 Výsledek: BSub = 9
A = 4; B = 3 A = 7; B = -1 A = -3; B = -3 A = -2; B = -4
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 Aritmetika v BCD čísly na binární aritmetice. Základem je, že pro zobrazení se používá BCD kód, kdy do nibblu kódu □ je umístěna jedna dekadická číslice. Potom v případě součtu dvou číslic v rámci nibblu mohou nastat situace, obr. 07-14. 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:
Výsledek součtu je větší než 9; Součet nibblu generuje přenos do vyššího nibblu. 0-tý nibble 0100 + 0101 1001
0-tý nibble 1000 Součet je + 0011 větší než 9 1011 + 0110 1 0001 1. nibble
0-tý nibble 1000 Přenos do + 1001 vyššího nibble 1 0001 + 0110 1 0010 1. nibble
Obr. 07-14 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]. nr = max(n1,n2) + 1
VŠB-TU Ostrava
(0710) 72
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Kde
nr je maximální řád součtu; n1, n2 jsou řády operandů součtu.
Na obr. 07-15 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ž 9. 3. 2. 1. 0. přenos přenos přenos nibble nibble nibble nibble 0000 +0000
1000 +1001 1
0001
0101 +0100 0
0001 +0110 0
0001 0000
0110 +1000 0
1001 +0000
1110 +0110
0 0111 0000
0 0001
1 1010 0110
0100 0000
1 1000
0 0000
0100
Kontrola v dekadické soustavě 856 +948 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 □
Pozn.
Obr. 07-15 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. 07-16. 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 47 -95
Operace
+ +
-48
Carry in
BCD číslo
Pozn.
0000 0100 0111 0000 1001 0101 0000 1001 1001 0000 1001
0100 0000 0100 0000 0101
0111 0100 1 1100 0110 0010
První operand 10 A = 9A +1, druhý operand První sčítání Korekce sčítání Výsledek je negativní
0000 -
0100 0100
0111 1 1000
A = 9A +1 Konečný výsledek v BCD kódu se znaménkem
Obr. 07-16 Ukázka odečítání pomocí operace sčítání
VŠB-TU Ostrava
73
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) 2) 3) 4)
A = 3789; B = 3589 A = 1444; B = 4559 A = 251; B = (-126) A = 348; B = 911
Výsledek: (0111 0011 0111 1000) Výsledek: (0110 0000 0000 0011) Výsledek: (0000 0001 0010 0101) Výsledek: (1001 0100 0011 0111)
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) 6) 7) 8)
7.8
A = 7; B = 5 A = 4; B = 1 A = 14; B = 9 A = 76; B = 25
Výsledek: (0000 0010) = (2)10 Výsledek: (0000 0011) = (3)10 Výsledek: (0000 0101) = (5)10 Výsledek: (0101 0001) = (51)10
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. 07-17. Algoritmus je Násobení celých platný jak z matematického, tak i počítačového hlediska a při použití tohoto algoritmu je čísel bez znanutné vzít v úvahu následující: mé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). nr = n1 + n2
(0711)
Kde
n1, n2 jsou celkové počty bitů jednotlivých operandů. nr je počet bitů výsledku.
* 0 1 0 1 1
Násobení 1 0 1 1 1 0 1 0 0 0 1 1 0 0 1 1
1 0 0 1 1 0 0 1 0
Počet bitů 5 bitů 3 bitů
Dekadicky 22 * 5
8 bitů
110
Obr. 07-17 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. 07-18:
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
Čí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 0101 * 1001 Krok 1
Absolutní hodnoty
Znaménko
0101 * 0111 0101 0 101 Krok 2 xor operace 01 01 000 0 1 minus 0010 0011 Krok 3
Výsledek ve dvojkovém doplňku
Kontrola v dekadické soustavě
0 plus 1 minus
(+5) * (-7)
1101 1101
OK
(-35)
Obr. 07-18 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í čísla ℚ racionální číslo ℚ. Tato podkapitola ovšem popisuje pouze dělení celých čísel, tzn. celočíselné jsou 1.1, 1/8, … □ 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]. Přirozená čísla ℕ □ Vztah (0712) definuje podíl s nebo beze zbytku jako výsledek dělení. Tento vzorec je jedno- jsou {0, 1, 2, 3 …} znač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á Euclidianovo děčísla. Později byl tento algoritmus rozšířen i o záporná čísla. Základní myšlenkou tohoto algolení, zbytek je ritmu je to, že zbytek je vždy kladný, [wiki_0709]. Další algoritmus celočíselného dělení přivždy kladný □ pouš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. n=d*q+r
(0712)
0 ≤ |r| < d
(0713)
„Floor, ceiling, truncation“ jsou matematické funkce důležité k zaokrouhlování čísel □
Kde
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
VŠB-TU Ostrava
75
7. Aritmetické operace pro celá čísla Na obr. 07-19 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 Euclidianův algoritmus MS Excel 2010
Octave v3.2.4
GNU bash, v4.2.45 C language (gcc compiler) C plus (gcc compiler) Python 2.7.6
Operace funkce Quotient Remainder QUOTIENT No remainder MOD Idivide Remainder Modulo / (integer division) % (reminder) / (integer division) % (as modulo, remainder) / (integer division) % (as modulo, remainder) // (integer division) % (as remainder, modulo)
7a3 2 1 2
7 a -3 -2 1 -2
-7 a 3 -3 2 -2
-7 a -3 3 2 2
1 2 1 1 2 1 2 1 2 1 2 1
-2 -2 1 -2 -2 1 -2 1 -2 1 -3 -2
2 -2 -1 2 -2 -1 -2 -1 -2 -1 -3 2
-1 2 -1 2 2 -1 2 -1 2 -1 2 -1
Obr. 07-19 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 10967-1: 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: “quotI (-3; 2) = -2 zaokrouhlení směrem k mínus nekonečnu, stanoveno v LIA-2” q = floor (n/d)
Floor division □
(0714)
“divtI (-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 quotI (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. LIA-2 stanovuje, V tomto případě, výsledek je ořezán – truncation. že zbytek je vyNorma ISO/IEC 10967-1: 2012 uvádí, že zbytek se vypočítá pomocí funkce modulo modI, počítán pomocí operace modulo (uvedené v LIA-2). Standard o modulo operaci uvádí: "Je spojena s dělením pomocí následu- □ jících identit: x = quotI (x; y) * y + modI (x; y) if y ≠ 0, a nedochází k přetečení
VŠB-TU Ostrava
76
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO y < modI (x; y) ≤ 0
if y < 0
0 ≤ modI (x; y) < y
if y > 0”
(0717)
Kde
x je čitatel nebo dělenec; y je jmenovatel nebo dělitel; modI 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: 2011 -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).
7.10 Reference [DEC_PDP11]
PDP11 processor handbook, PDP11/04/34a/44/60/70, instruction set and instruction SUB; Digital Equipment Corporation, 1979; (http://bitsavers.informatik.uni-stuttgart.de/pdf/dec/pdp11/handbooks/PDP11_Handbook1979.pdf; on line 2013-09-24)
[DEC_VAX]
VAX780 Architecture handbook; Digital Equipment Corporation, 1977; (http://bitsavers.trailingedge.com/pdf/dec/vax/VAX_archHbkVol1_1977.pdf; on line 2013-09-24)
[Ercegovac_2004] M. D. Ercegovac, M. Lang; Digital Arithmetic; Morgan Kaufmann Publishers 2004; ISBN 1-55860-798-6 [Intel_0701]
VŠB-TU Ostrava
Intel® 64 and IA-32 Architectures Software Developer’s Manual; Intel 2011
77
7. Aritmetické operace pro celá čísla [Internet_0701]Arithmetic Operations on Binary Numbers; http://www.doc.ic.ac.uk/~eedwards/compsys/arithmetic/; on line 2013-09-26 [Internet_0702]Multiplication in FPGAs; http://www.andraka.com/multipli.htm; on line 2013-10-31 [ISO/IEC_0701] ISO/IEC 10967-1:2012 - Information technology - Language independent arithmetic - Part 1: Integer and floating point arithmetic [ISO/IEC_0702] ISO/IEC 9899:2011 - Programming languages — C [ISO/IEC_0703] ISO/IEC 14882:2011 - Programming Language C++ [Kaps_2013]
Jens-Peter Kaps; Digital System Design, Signed Magnitude Addition – Subtraction Algorithm; George Mason University; http://ece.gmu.edu/~jkaps/courses/ece331-s07/resources/signedinteger.pdf
[Koren_2002] I. Koren; Computer Arithmetic Algorithm; A. K. Peters Ltd. 2002; ISBN 156881-160-8 [Matlab_0701] Dom::Rational Field of rational number; http://www.mathworks.com/help/symbolic/mupad_ref/dom-rational.html; on line 2014-0712 [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 9780-8176-4704-9; e-ISBN 978-0-8176-4705-6 [Python_0701] Why Python's Integer Division Floors; http://python-history.blogspot.cz/2010/08/why-pythons-integer-division-floors.html; on line 2014-0711 [Python_0702] PEP 238 -- Changing the Division Operator; http://legacy.python.org/dev/peps/pep-0238/; on line 2014-07-11 [Stine_2012]
J. E. Stine; Digital Computer Arithmetic Datapath Design Using Verilog HDL; Springer 2012; ISBN-13 978-1461347255
[wiki_0701]
Status register; http://en.wikipedia.org/wiki/Status_register; on line 201309-26
[wiki_0702]
Negative flag; http://en.wikipedia.org/wiki/Sign_flag; on line 2013-09-26
[wiki_0703]
Zero flag; http://en.wikipedia.org/wiki/Zero_flag; on line 2013-09-26
[wiki_0704]
Overflow flag; http://en.wikipedia.org/wiki/Overflow_flag; on line 2013-0926
VŠB-TU Ostrava
78
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO [wiki_0705]
Carry flag; http://en.wikipedia.org/wiki/Carry_flag; on line 2013-09-26
[wiki_0706]
Sign extension; http://en.wikipedia.org/wiki/Sign_extension; on line 201309-26
[wiki_0707]
Booth's multiplication algorithm; http://en.wikipedia.org/wiki/Booth%27s_multiplication_algorithm; on line 2013-10-21
[wiki_0708]
Rational data type; http://en.wikipedia.org/wiki/Rational_data_type; on line 2014-07-12
[wiki_0709]
Euclidean division; http://en.wikipedia.org/wiki/Euclidean_division; on line 2014-07-10
[wiki_0710]
Remainder; http://en.wikipedia.org/wiki/Remainder; on line 2014-07-10
[wiki_0711]
Modulo operation; http://en.wikipedia.org/wiki/Modulo_operation; on line 2014-07-10
[wiki_0712]
Division algorithm; http://en.wikipedia.org/wiki/Division_algorithm; on line 2014-08-18
VŠB-TU Ostrava
79
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 Čísla v pevné řádové v předem definovaném místě. Z matematického hlediska jsou to racionální čísla ℚ, čárce jsou podmnožikterá se vyjádřují jako podíl nebo zlomek n/d. Pokud přemýšlíme o zlomku a nou reálných čísel, ne □ možnostech jeho zápisu a čtení, pak reálné číslo 1.23 je možné napsat jako např. naopak. 0,00123 * 1000 (0,00123/10-3)… 1,23 * 1, a také jako 1,23 * 1/1 ... 1230 * 1/1000 atd. Druhý činitel (tedy číslo, kterým násobím) se nazývá měřítko (scaling factor), [wiki_0803]. Měřítko - Scaling Toto měřítko je buď číslo celé nebo ve tvaru zlomku 1/jmenovatel. Pak je možné číst zlomek Factor□ 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. 08-01.
1.23 = 12.3/10 = 123/100 = 1 230/1 000
-1.1 = -22/20 = -33/30
1.23 je 123 v měřítku 1/100
-1.1 je -33 v měřítku 1/30
123 v měřítku 1/100 je 1.23
1.23 je 123 v měřítku 1/100□
123 v měřítku 1/100 je 1.23□
-22 v měřítku 1/20 je -1.1
Obr. 08-01 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 64536.
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
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO
Převod čísla s desetinnou tečkou na celé číslo. Při vhodné definici a stejné velikosti slova, může číslo v pevné řádové čárce být přes- Význam□ ně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.
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ř. 65536 = 216. 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 ℚ16.16. 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/2n. 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. 08-02 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. 08-02. Tento Pevná řádová čárka má způsob také označujeme jako integer číslo. Druhý způsob chápaní čísla v pevné řá- znaménko, celou část a □ dové čárce je jako reálné číslo. V tomto případě je důležitá informace o pozici radix desetinnou část tečky, která číslo rozděluje na celočíselnou část (integer část) a zlomkovou část, obr. 08-02. 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
8. Aritmetika v pevné řádové čárce znaménkem, kdy MSB bit je znaménkový bit. V příkladu na obr. 08-02, je měřítko 1/23, to znamená, že zlomková část má 3 bity počítané od desetinné tečky vpravo. Váha LSB bitu je 23 , všeobecně váha LSB bitu je 2-f pro měřítko 1/2f. Hodnota čísla v pevné řádové čárce na obr. 08-02 je IN = 53H jako celé číslo a FX = 53H * 1/23 = A.AH jako reálné číslo s radix tečkou. 7
0
0
1
0
Nibble 1
1
0
1
0
7
1
* 1/2
3
0
Nibble 0
0
1
0
1
0
Integer část
Znaménko
Znaménko
Integer číslo - IN
1
0
1
Velikost (počet bitů) zlomkové části je dána měřítkem.
Zlomková část Radix tečka
Poloha radix tečky je dána měřítkem.
Měřítko Číslo v pevné řádové čárce – FX - SF nebo reálné číslo - Re
Obr. 08-02 Označení částí v pevné řádové čárce Radix tečka a desetinná čárka □
Poznámka k desetinné čárce a radix tečce 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
MSB 7
0 Váhy pro čísla bez znaménka Váhy pro čísla se znaménkem
1
0
1
0
0
1
LSB 0
MSB 7
1
0
LSB 0
1
0
1
0
0
1
1
b7 b6 b5 b4 b3 b2 b1 b0
a4 a3 a2 a1 a0 a-1 a-2 a-3
-b7 b6 b5 b4 b3 b2 b1 b0
-a4 a3 a2 a1 a0 a-1 a-2 a-3
Celočíselné číslo Integer číslo - IN
Číslo v pevné řádové čárce - FX Reálné číslo - Re
Obr. 08-03 Váhy bitů Obr. 08-03 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 20 a MSB bit může VŠB-TU Ostrava
82
Váhy bitů. □
Čí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 20 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 ℚ3.3
MSB 7
LSB 0
MSB 7
LSB 0
+ 2.4
0
0
0
1
0
0
1
1
0
0
0
1
0
0
1
1
- 2.4
1
1
1
0
1
1
0
1
1
1
1
0
1
1
0
1
Znaménkové rozšíření
Celá část čísla - IN
Znaménkové rozšíření. □
Fixed point - FX
Obr. 08-04 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. 08-04. 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:
ℚm.f formát nebo ℚm.n formát nebo ℚ číselný formát, více informací viz níže. ℚf formát, kde ℚ je prefix, který označuje racionální čísla a f je počet bitů v desetinné Formáty. □ čá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.
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ř. 0.16 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
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 ℚ Číselný formát ℚ je formát pro pevnou řádovou čárku, a také písmeno ℚ 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 ℚm.f, ℚf, ℚm.n nebo ℚn. Tento formát bude využíván v následujícím textu. Formát ℚ 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 ℚ2.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 ℚm.f se znaménkem. Rozsah pro pevnou řádovou čárku bez znaménka 0 až (2m+f - 1)/2f
(0802)
0 až 2m – 1/2f
(0803)
Rozsah zobrazení pro pevnou řádovou čárku bez znaménka 0 až (2m+f-1)/2f □
Rozsah pro pevnou řádovou čárku se znaménkem, m je bez znaménkového bitu od - 2m+f/2f do + (2m+f - 1)/2f
(0804)
od -2m do + (2m – 1/2f)
(0805)
ε = 1/2f
(0806)
Přesnost
Rozsah zobrazení pro pevnou řádovou čárku se znaménkem -2m+f/2f až (2m+f-1)/2f□
Kde
m je počet bitů celočíselné části (integer part);
VŠB-TU Ostrava
84
Čí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 ℚ1.30
1.4D*230 = 1 503 238 553.6D ≈ 1 503 238 554D = 5999 999AH. 5999 999AH v měřítku 1/230 je 1.400 000 000 372 529 029 846 191 406 25D. Chyba zobrazení je + 0.000 000 026 609 216 417 585 100 446 43%. 0x27B3 3333 je 32-bitová hodnota a pokud představuje číslo v pohyblivé řádové čárce při definici binary32 jedná se o reálné číslo 1.399 999 976 158 142 089 843 75 Chyba zobrazení je -0.000 001 702 989 850 725 446 428 571 429%
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 ℚ1.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/2f 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 ℚ 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řetečení □ příznakem V (overflow), to podle toho, zda jde o přetečení bez nebo se znaménkem.
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 ai a bi, které jsou násobeny váhou Bi. Koeficient ai je odvozen od reálného čísla zobrazeného v pevné řádové čárce s radix tečkou. Naproti tomu koeficient bi je odvozen od celého čísla integer. Výpočet reálného čísla zobrazeného v pevné řádové
VŠB-TU Ostrava
85
Pro číslo se znaménkem, koeficient am-1 je znaménkový bit□
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. 𝑈𝑁 = + 𝑎𝑚−1 ∗ 𝐵𝑚−1 + ⋯ 𝑎0 ∗ 𝐵0 + 𝑎−1 ∗ 𝐵−1 + ⋯ 𝑎−𝑓 ∗ 𝐵−𝑓 (0807) 𝑆𝑁 = −s ∗ 𝐵𝑚 + 𝑎𝑚−1 ∗ 𝐵𝑚−1 + ⋯ 𝑎0 ∗ 𝐵0 + 𝑎−1 ∗ 𝐵−1 + ⋯ 𝑎−𝑓 ∗ 𝐵−𝑓 (0808) 𝑈𝑁 =
1 2𝑓
∗ (+ 𝑏𝑚+𝑓−1 ∗ 𝐵𝑚+𝑓−1 + ⋯ 𝑎1 ∗ 𝐵1 + 𝑏0 ∗ 𝐵0 )
𝑆𝑁 =
1 2𝑓
∗ (−s ∗ 𝐵𝑚+𝑓 + 𝑏𝑚+𝑓−1 ∗ 𝐵𝑚+𝑓−1 + ⋯ 𝑏1 ∗ 𝐵1 + 𝑏0 ∗ 𝐵0 ) (0810)
(0809)
𝐹𝑋 = 𝐼𝑁 ∗ 1⁄ 𝑓 2
(0811)
Kde
Pro převod je nezbytné UN je jakékoli číslo bez znaménka. znát: SN je jakékoli číslo se znaménkem. Polynom číselné souB je základ číselné soustavy, B je přirozené číslo větší, než n +1. stavy. ai je koeficient z množiny {0, 1, … B-1}, i je v rozmezí od m-1 do –f. Algoritmus dvojkového Bi je váha, i je v rozsahu od m-1 do –f. doplňku. bi je koeficient z množiny {0, 1, … B-1}, a i je v rozmezí od 0 do m + f – 1. Měřítko. s je znaménkový bit s váhou Bm+f. Pořadí aplikovaných m je počet koeficientů celé části včetně znaménka. pravidel je náhodné. □ 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/2f je měřítko. Radix tečka je mezi koeficienty a0 a a-1 a je označena červenou svislou čárou.
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
(0812)
2
(0813)
A = (~ A) + 1 A = 2n – A
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í ℚm.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
Čí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. 08-03. 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, Převod do pevné když převáděné číslo je v rozsahu zobrazení, který je dán opět formátem. Avšak v počítači řádové čárky□ 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/2f. 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 2f. Hodnota „x“ je součin Re a 2f. 𝑥
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 nbitové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é.
−𝑥
2𝑓
−𝐼𝑁
2𝑓
(𝐼𝑁)
−𝐹𝑋 =
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.
−𝐹𝑋 =
−𝑥 2𝑓
≈
2𝑓
−𝐼𝑁 2𝑓
=
2
2𝑓
≈
=
𝐼𝑁𝐻
𝐹𝑋 =
2𝑓
≈
𝐼𝑁
= 2
2𝑓
−𝐼𝑁𝐻 2𝑓
=
2
(𝑏𝑖𝑡𝑤𝑖𝑠𝑒 𝑛𝑜𝑡(𝐼𝑁)+1) 2𝑓
=
2
𝐼𝑁𝐻
2𝑓
n
Aplikace vztahu (0811), A = 2 – A. Definuje znaménkový bit a počet bitů „n“ ve kterých bude výsledek zobrazen.
VŠB-TU Ostrava
87
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.
−𝐹𝑋 =
−𝑥 2𝑓
≈
−𝐼𝑁 2𝑓
=
2
(2𝑛 −𝐼𝑁)𝐷 2𝑓
=
2
𝐼𝑁𝐻
2𝑓
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. 08-05 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ě
Převod záporného reálného čísla -2.36 do formátu Q2.10 v 16-bitovém slově
1.23 * 211 = 2 519.04 2 519.04 ≈ 2 519 2 519D = 09D7H, IN = 09D7H FX = 0 0001.0011 1010 111B = 1.3AEH Umístění ve slově je 0x09D7 Hodnota ve slově je IN = 09D7H Fx = 1.3AEH
Kontrola
Kontrola
1.3AEH = = 1*160+3*16-1+A*16 -2+E*16-3 = 1.229 980 468 75D Reálné číslo je 1.229 980 468 75
□
- 2.36 * 210 = - 2 416.64 - 2 416.64 ≈ - 2 417 2 (2417) = (216 – 2147)D = 63 119D = F68FH, Ve dvojkovém doplňku 2 IN = F68FH, 2Re = 111101.1010 0011 11B = 3D.A3CH Umístění ve slově je 0xF79D, dvojkový doplněk 2 IN = F68FH F68FH * 1/210 (scaled by) = 211 1101.1010 0011 11B = 23D.A3CH Fx = 3D.A3CH, ve tvaru dvojkového doplňku.
3D.A3CH = -1*25 + 1*24 + D*160 + A*16-1 + 3*16-2 + C*16-3 = -2.360 351 562 5 Reálné číslo je - 2.360 351 562 5 □
Obr. 08-05 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 ℚm.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. 0806. 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 ℚm.f. Pořadí aplikace vzorců může být náhodné, Převod z pevné □ ale potom je nutno zvládat výpočty v binární nebo hexadecimální soustavě stejným způsobem řádové čárky. jako v desítkové číselné soustavě. V následujícím textu jsou popsány dva základní algoritmy. VŠB-TU Ostrava
88
Čí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/2f, viz obr. 08-06. Algoritmus je: 16-bitové číslo 0x062B ve formátu ℚ3.8
0x062B je kladné číslo, MSB = 0 Ve slově IN = +062BH, Fx = +06.2BH 062BH = 1 579D 1 579D v měřítku 1/28 = 6.167 968 75D Reálné číslo je 6.167 968 75 □
Kontrola 6D = 110B 0.167 968 75D * 16 = … 0.167 968 75D = 0.2BH 6.2BH * 28 = 62BH Po znaménkovém rozšíření do slova 0x062B v měřítku 1/28 je 6,16796875D Slovo obsahuje: 0x062B □
16-bitové číslo 0xDCBA ve formátu ℚ4.11
0xDCBA je záporné číslo, MSB = 1 Ve slově, IN = DCBAH, FX = 1B.974H DCBAH = 56 506D 2 DCBAH = - ((216)D – 56506D) = - 9030D -9 030D v měřítku 1/211 je -4.409 175 687 5D Reálné číslo je - 4.409 179 687 5 □
Kontrola 4D = 100B 0.409 179 687 5D * 2 = … 0.409 179 687 5D =0.68CH - 4.409 179 687 5D = - 4.68CH - 4.68CH * 211 = - 100.0110 1000 110B * 211 = -2346H Dvojkový doplněk znaménkového rozšíření (~2346H) + 1= 2DCBAH = 0xDCBA Slovo obsahuje 0xDCBA □
Obr. 08-06 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. 𝐼𝑁𝐻 2𝑓
1
𝑅𝑒 =
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), 2A = bitwise not (A) plus 1. Pro zdůraznění bude zde použito znaménko minus. Vztah se aplikuje na obsah slova „INH“. −𝐼𝑁𝐻 = (𝑏𝑖𝑡𝑤𝑖𝑠𝑒 𝑛𝑜𝑡 (𝐼𝑁𝐻 ) 𝑝𝑙𝑢𝑠 1)𝐻
𝑅𝑒 =
= 𝐼𝑁𝐷 ∗ 2𝑓
−𝐼𝑁𝐻 2𝑓
VŠB-TU Ostrava
1
= −𝐼𝑁𝐷 ∗ 2𝑓
89
8. Aritmetika v pevné řádové čárce
Na vypočtené číslo se aplikuje vztah (0809), číslo se vynásobí měřítkem 1/2f. Konec algoritmu. Druhá verze je aplikace vztahu (0813), 2A = (2n - 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ů. −𝐼𝑁𝐷 = (2𝑛 − (𝐼𝑁𝐻 ))𝐷
𝑅𝑒 = −𝐼𝑁𝐷 ∗
Na vypočtené číslo se aplikuje vztah (0811), číslo se vynásobí měřítkem 1/2f. Konec algoritmu.
1 2𝑓
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. 08-05 v části kontrola. Převod 16 bitového čísla 0x2ED8 ve formátu ℚ7.7 na reálné dekadické číslo
Převod 16 bitového čísla 0xE9AB ve formátu ℚ5.9 na reálné dekadické číslo
Znaménkové rozšíření je použito SND = (1/27) * ( -0*215 + 0*214 + 1*213 + 0*212 + 14*162 + 13*161 + 8*160) SND = (1/27) * (8192 + 3584 + 208 + 8) SND = (1/27) * (11992)=93,6875 Reálné číslo je 93.687 5D□
Znaménkové rozšíření je použito SND = (1/29) * ( -1*215 + 1*214 + 1*213 + 0*212 + 9*162 + 10*161 + 11*160) SND = (1/29) * ( -32768 + 28930) SND = (1/29) * ( -5717) = -11.166015625 Reálné číslo je -11.166 015 625D□
Kontrola
Kontrola
93D = 5DH 0.687 5D * 16 = … 0.687 5D =0.BH 93.687 5D = 5D.BH Fx = 5D.BH = 0 0101 1101.1011 000B Integer ve slově je 0x2ED8 □
-11.166 015 625D * 29 = -5717D = -1655H 2 (1655)H = (bitwise not (1655) + 1) = 2 (1655)H = E9ABH Integer číslo ve slově je 0xE9AB □
Obr. 08-07 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. 08-07. 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
𝑈𝑁 =
VŠB-TU Ostrava
1 2𝑓
∗ (+ 𝑏𝑛 ∗ 𝐵𝑛 + ⋯ 𝑎1 ∗ 𝐵1 + 𝑏0 ∗ 𝐵0 )
90
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO
Do vztahu se dosazují koeficienty bi, které odpovídají celému číslu IN. Zlomek 1/2f 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.
𝑆𝑁 =
Do vztahu se dosazují koeficienty bi, které odpovídají celému číslu IN. Koeficient bn je MSB bit a samozřejmě odpovídá znaménku. Zlomek 1/2f je měřítko. Konec algoritmu.
1 2𝑓
∗ (− 𝑏𝑛 ∗ 𝐵𝑛 + 𝑏𝑛−1 ∗ 𝐵𝑛−1 + ⋯ 𝑎1 ∗ 𝐵1 + 𝑏0 ∗ 𝐵0 )
Příklady 1) Číslo A vyjádřete v měřítku 1/23: a) A = 256 Výsledek: 32 b) A = 400 Výsledek: 50 c) A = 72 Výsledek: 9 5 2) Číslo A vyjádřete v měřítku 1/2 : a) A = 256 Výsledek: 8 b) A = 640 Výsledek: 20 c) A = 160 Výsledek: 5 3 3) Číslo A vyjádřete v měřítku 1/10 : a) A = 256 Výsledek: 0.256 b) A = 640 Výsledek: 0.640 c) A = 1689 Výsledek: 1.689 4) 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: 14.75 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: 7.375 c) A = 0x19 Výsledek: 11.125 d) A = 0x0E Výsledek: 1.75
8.6 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 Aritmetické opedefinovány ve tvaru zlomku. Vzorce (0814), (0815) a (0816) definují základní princip aritme- race se stejným tických operací. Čitatel představuje celé číslo integer, které je vynásobeno měřítkem. Vý- měřítkem.□ 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 ℚm.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é
VŠB-TU Ostrava
91
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. 𝑎
𝑏
2𝑓
+ 2𝑓 =
𝑎 2𝑓1
(0814)
2𝑓
𝑏
𝑎∗𝑏
∗ 2𝑓2 = 2𝑓1+𝑓2
𝑎 2𝑓1 𝑏 2𝑓2
𝑎+𝑏
=
(0815)
𝑎 2𝑓2
(0816)
𝑏 2𝑓1
Kde
a, b jsou celá čísla; 2f je měřítko. Poté ℚ3.4
Před ℚ3.3 MSB 7
0
0
0
0
0
1
1
LSB 0
MSB 7
0
0
LSB 0
0
0
0
1
1
0
0
6/23 * 2/2 = 12/24 MSB 7
1
1
1
1
1
0
1
LSB 0
MSB 7
0
1
LSB 0
1
1
1
0
1
0
0
-6/23 * 2/2 = -12/24 Obr. 08-08 Ú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. Korekce.□ Násobení 2 může být vykonáno aritmetickým posunem doleva, obr. 08-08, 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í. A * 2i = A << i
(0817)
A//2i = 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. 08-09, 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
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Po ℚ3.2
Před ℚ3.3 MSB 7
0
0
0
0
0
1
1
LSB 0
MSB 7
0
0
LSB 0
0
0
0
0
0
1
1
(6/23) / (2/2) = 3/22 MSB 7
1
1
1
1
1
0
1
LSB 0
MSB 7
0
1
LSB 0
1
1
3
(-6/2 ) / (2/2) = -3/2
1
1
1
0
1
2
Obr. 08-09 Ú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 10967-1:2012 Language Independent Architecture. Příklad v Python: -7//2 = -4, -8//2 = -4.
8.7 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 a/2f + b/2f = počet bitů celočíselné části o jeden. Vztah (0819) definuje nový formát výsledku všeobecně, (a+b)/2f□ 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. ℚm1.f ± ℚm2.f = ℚ(max(m1, m2) + 1).f
(0819)
Kde
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. 08-09. Jedná se o situaci (0.1b + 0.1b = 1.0b), 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. 0810. Záporné číslo je zobrazeno pomocí dvojkového doplňku.
VŠB-TU Ostrava
93
8. Aritmetika v pevné řádové čárce
MSB 7
ℚ0.5 ℚ0.5
+
ℚ1.5
Binární zobrazení v byte
LSB 0
Celočíselná aritmetika
Zlomek
Dekadické reálné číslo
0
0
0
1
1
0
0
0
24D
0x18/25
0.75
0
0
0
1
0
1
0
0
20D
0x14/25
0.625
0
0
1
0
1
1
0
0
44D
0x2C/25
1.375
Kontrola: 0xc2/25 = 44D/25 = 1.375D Obr. 08-10 Příklad, kdy bit je generován v celočíselné části
Binární zobrazení v byte MSB 7
ℚ0.3 ℚ0.3 ℚ1.3
+
Celočíselná aritmetika
Zlomek
Dekadické racionální číslo
LSB 0
1
1
1
1
1
0
1
1
-5D
0xFB/23
-0.625
0
0
0
0
0
1
0
0
4D
0x04/23
0.5
1
1
1
1
1
1
1
1
-1D
0xFF/23
-0.125
Kontrola: 0xFF/23 = 2FFH/23 = -1D/23 = -0.125 Obr. 08-11 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 ℚm.f, a formát výsledku je vypočítán podle vztahu (0820) pro čísla bez znaménka a podle vztahu (0821) pro a/2f1 * b/2f2 = formát čísel se znaménkem, viz literatura [Yates_082013] a [Oberstar_082007]. Výsledek (a * b)/2f1 + f2 □ může být změněn na požadovaný formát nejprve zaokrouhlením s následnou úpravou. ℚm1.f1 * ℚm2.f2 = ℚ(m1 + m2).(f1 + f2)
(0820)
ℚm1.f1 * ℚm2.f2 = ℚ(m1 + m2 + 1).(f1 + f2)
(0821)
Kde
VŠB-TU Ostrava
94
Čí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 MSB 7
ℚ2.5 ℚ2.5 ℚ5.10
Znaménkové rozšíření 0
0
0
0
Jako zlomky
* 1
1
0 1
Zlomek
LSB 0
0
0
1
0
1
0
1
1
2BH/25
0
1
0
0
1
1
1
0
* 4EH/25
0
0
0
1
1
0
1
0
0D1AH/210
(43/25)D * (78/25)D = (3354/210)D = 3.275 390 625D
Kontrola
(2B/25)H * (4E/25)H = (0D1A/2A)H = (3354/210)D = 3.275 390 625D 625390 625D Obr. 08-11 Příklad násobení
Příklad násobení je uveden na obr. 08-11, kde výsledek je v novém formátu. Pokud se očekává stejný formát, je nutné výsledek zaokrouhlit, viz obr. 08-12. Zaokrouhlování se provádí podle principu zaokrouhlení na nejbližší sudou, [IEEE 754-2008] a [wiki_0810]. ℚ5.10
ℚ5.5
0
0
0
0
0
0
0
0
1
1
1
1
0
0
1
1
0
0
0
0
0
1
1
0
1
0
1
R bit = 1 S bit = 1 Proto plus 1/2ulp
Obr. 08-12 Ú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/2f) ÷ (B/2f) = (A/B) *(2f/2f) = (A * 2f)/B * 1/2f VŠB-TU Ostrava
(0822) 95
8. Aritmetika v pevné řádové čárce Kde
A, B jsou operandy dělení; 1/2f je měřítko.
Obr. 08-12 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 7
0
1
1
1
1
0
1
LSB 0
MSB 7
0
0
LSB 0
MSB 7
0
0
LSB 0
0
0
0
0
0
1
1
2. krok, čitatel je násoben 25 MSB 7
0
1
1
0
1
0
LSB 0
MSB 4
0
0
1
0
0
0
MSB 7
3. krok, podíl
0
LSB 0
0
0
0
0
1
0 1
LSB 0
0
0
0
0
0
1
1
MSB 7
0
LSB 0
0
0
1
0
1
0
1
Výpočet (7A/25)H ÷ (3/25)H = (((7A *25)/3) * (1/25))H = (F40/3)H * (1/25) = 515H * 1/25 515H * 1/25 = 1301D * 1/25 = 40.656 25 Kontrola: (0x7A/25) / (0x03/25) = (122D/25) / (3D/25) = 3.812 5/0.093 755 = 40.666 666 6… Obr. 08-12 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 1-55860-798-6 [Google_0801] libfixmath, wiki; https://code.google.com/p/libfixmath/w/list; on line 201407-15 [IEEE 754-2008]
IEEE Std 754™-2008, IEEE Standard for Interchange-Point Arithmetic, 29 August 2008, revision of IEEE 754 – 1985
[ISO/IEC_0801] ISO/IEC 10967-1:2012 - 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 156881-160-8 VŠB-TU Ostrava
96
Čí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 978-1-85617678-1 [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; https://docs.python.org/2/library/fractions.html#module-fractions; on line 2014-07-17 [TI_082003]
TMS320C64x DSP Library Programmer’s Reference; Texas Instrument, October 2003, SPRU565B
[vhdl_0801]
D. Bishop: Fixed point package user’s guide; http://www.vhdl.org/fphdl/Fixed_ug.pdf; on line 2014-07-18
[wiki_0801]
Division (mathematics); http://en.wikipedia.org/wiki/Division (mathematics); on line 2013-08-03
[wiki_0802]
Fraction (mathematics); http://en.wikipedia.org/wiki/Fraction (mathematics); on line 2013-08-03
[wiki_0803]
Fixed-point arithmetic; http://en.wikipedia.org/wiki/Fixed-point arithmetic; on line 2013-08-03
[wiki_0804]
Binary scaling; http://en.wikipedia.org/wiki/Binary_scaling; on line 201407-15
[wiki_0805]
Q (number format); http://en.wikipedia.org/wiki/Q_(number_format); on line 2014-07-15
[wiki_0806]
Binary multiplier; http://en.wikipedia.org/wiki/Multiplication_ALU; on line 2013-09-13
[wiki_0807]
Booth's multiplication algorithm; http://en.wikipedia.org/wiki/Booth%27s_multiplication_algorithm; on line 2013-09-13
[wiki_0808]
libfixmath; http://en.wikipedia.org/wiki/Libfixmath; on line 2014-07-15
[wiki_0809]
Rational data type; http://en.wikipedia.org/wiki/Rational_data_type; on line 2014-07-17
[wiki_0810]
Rounding; http://en.wikipedia.org/wiki/Rounding; on line 2014-07-18
[wiki_0811]
Division algorithm; http://en.wikipedia.org/wiki/Division_algorithm; on line 2014-07-18
[Yates_082013] R. Yates: Fixed-Point Arithmetic: An Introduction; Digital Signal Labs - signal processing systems 2013; http://www.digitalsignallabs.com/fp.pdf, on line 2014-07-18
VŠB-TU Ostrava
97
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. 09-01. 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 bexp □ Významné číslice x baseexp
(0901)
Kde
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; baseexp je měřítko (SF).
Číslice jsou definovány základem číselné soustavy.
Dekadická číselná soustava 123.0 x 100 = 12.3 x 101 = 1.23 x 102 = 0.123 x 103 123 x 10-3 = 12.3 x 10-2 = 1.23 x 10-1 = 0.123 x 100
Binární číselná soustava 0
1
2
1101.0 x 2 = 110.1 x 2 = 11.01 x 2 = 1.101 x 2
3
V binární číselné soustavě, je užitečné a obvyklé vyjadřovat exponent jako dekadické číslo.
11 x 2-3 = 1.1 x 2-2 = 0.11 x 2-1 = 0.011 x 20 Teoretický zápis Významné číslice x baseexp Obr. 09-01 Možnosti zápisu čísla v pohyblivé řádové čárce
VŠB-TU Ostrava
98
Čí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 754-2008.□
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 102, 0.2 x 103, 123 x 1045, 12.3 x 10-67, 0.123 x 103, 1.23 x 102, 11.01 x 24, 1.101 x 25 ….
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 103 m je 34,5 km; 10 Gb/s je 10 x 109 b/s (bit za sekundu); 1,5 TiB je 1,5 x 212 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 b0. Například, 7,8 x 102; 1,101 x 27 ….
Vědecký zápis 87.6 x 103, 10.01 x 27 …□
Technický zápis 87.6 x 103, 3.01 x 10-12…□
Normalizovaný vědecký zápis 8.76 x 104, 1.001 x 28…□
Obr. 09-02 Příklady E zápisu
E zápis je zobrazen na obr. 09-02. 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
VŠB-TU Ostrava
99
E zápis 8.76E4, 1.001E8…□
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 3
4.56 x 10 = 45.6 x 10
2
7.89 x 101 = 0.789 x 102
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 Historie. 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]. 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 8541987 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 754-1985 a IEEE 854-1987. Standard IEEE 754-2008 je také mezinárodní normou ISO/IEC/IEEE 60559: 2011. Následující text bude vycházet ze standardu IEEE 754-2008, 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
IEEE 754 ISO/IEC/IEEE 60559:2011 □
Čí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í 1939-1941 v počítači Z-3, [Zuse_2008], a následně Burks v roce 1946 [Burks_1946] a [RFC 0382] v roce 1972. Následně, termín significand nebo zlomek byl použit ve standardu IEEE 754-1985, ale ve standardu IEEE 754-2008 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 754-2008. Významné číslice x bexp □ 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
9. Čísla v pohyblivé řádové čárce možnosti zápisu significandu si uvedeme příklady zápisu číslo 12.34 v desítkové číselné soustavě, které může být může být zapsáno několika způsoby:
1.234 * 10+1, significand je ve formě s desetinnou tečkou. To je normalizovaná forma zápisu. 0.1234 * 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]. 1234 * 10-2, significand je celé číslo. (1234/104) * 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. 09-03 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.
Dekadicky: 1.234567 𝑥 104 = Binárně: 1.111101 𝑥 24 =
1 234 567 106
111 1101 26
Přesnost p udává maximální počet číslic v significandu. □
𝑥 104
𝑥 24
Obecný zápis: 𝑑0 . 𝑑1 𝑑2 … 𝑑(𝑝−1) 𝑥 𝑏 𝑒𝑥𝑝 =
𝑑0 𝑑1 𝑑2 … 𝑑𝑝−1 𝑥 𝑏 𝑒𝑥𝑝 𝑏 𝑝−1
Obr. 09-03 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. v = (-1)sign x significand x bexp
Konečné hodnoty. □
(0902)
Kde
v je konečná hodnota čísla v pohyblivé řádové čárce;
VŠB-TU Ostrava
102
Čí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 754-2008]:
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:
Nula se znaménkem a nenulové číslo ve formátu FP
v = (-1)S x be x m,
Significand ve vědecké formě. □
(0903)
(-1)S x m x be
Kde
VŠB-TU Ostrava
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ě d0 • d1 d2…dp −1, kde di je celé číslo 0 ≤ di < b, a tedy 0 ≤ m < b. 103
d0 je MSB a dp-1 je LSB. □ Červená tečka je radix point. □
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, d0 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“.
Nula se znaménkem a nenulové číslo ve formátu FP
Significand jako koeficient. □
v = (-1)S x bq x c,
(0904)
(-1)S x c x bq
Kde
v je konečná hodnota čísla v pohyblivé řádové čárce; s je znaménko s hodnotou 0 nebo 1; Quantum. □ 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 d0 je MSB a formě d0 d1 d2…dp −1, kde di je celé číslo v rozsahu 0 ≤ di < b. Koeficient c je tedy dp-1 je LSB. □ celé číslo 0 ≤ c < bp, kde p je přesnost.
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 d0 a d-1, a ve vzorci (0904) po číslici dp-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 p-1
m = c/b
(0905)
Vztah mezi zápisy. □
(0906)
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/bp-1. Všechny vzorce (0903), (0904) a (0907) jsou ekvivalentní a odpovídají stejné konečné hodnotě v pohyblivé řádové čárce.
VŠB-TU Ostrava
104
Significand v měřítku. □
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO
c
𝑣 = (−1)𝑠 𝑏𝑝−1 𝑏 𝑒
(0907)
(-1)S x c/bp-1 x be
Kde
e je exponent; p je přesnost; c je significand jako koeficient; v je konečná hodnota čísla v pohyblivé řádové čárce; c/bp-1 je significand v měřítku; b je základ číselné soustavy.
9.5 Formáty definované standardem IEEE 754-2008 Nový standard IEEE 754-2008 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 754-2008]. 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].
Poznámka k rozšířeným formátům Standard IEEE 754-2008 definuje i další typy rozšířených formátů následujícími větami:
2. 1. 33 interchange format: tento formát má pevnou šířku polí, které jsou definovány tímto standardem. 2. 1. 20 extendable precision format: v tomto formátu je přesnost a rozsah definován a spravován uživatelem. 2. 1. 21 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 09-01 a 09-02. 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
Základní formáty.□
Formáty pro výměnu – Interchange formats.□
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 k, počet bitů paměťového slova
binary16
binary32
binary64
16
32
54
128
p, přesnost
11
24
54
113
emax, maximální exponent
15
127
1 023
16 383
2(k-p-1)-1
Odvozené parametry 127 1 023 1 1
16 383 1
emax 1 round (4xlog2(k)) - 13
bias, E-e Znaménkový bit w, šířka pole exponentu v bitech
15 1 5
8
binary128
11
binary{k} (k≥128) násobek 32 k - round (4xlog2(k)) + 13
15
t, šířka pole signifi10 23 52 112 k–w-1 candu v bitech k, šířka paměti v bitech 16 32 64 128 1+w+t Vysvětlení: Zdroj: IEEE 754-2008 Žlutá pole obsahují počáteční parametry a modrá pole odvozené parametry Tabulka 09-01 Parametry binárního interchange formátu
Parametry k, počet bitů paměťového slova p, přesnost emax, maximální exponent
decimal32
decimal64
decimal128
decimal{k} (k≥32)
32
54
128
násobek 32
7
16
34
9 x k/32 – 2
96
384
6 144
3 x 2(k/16+3)
emax + p - 2
Odvozené parametry bias, E-q Znaménkový bit w + 5, šířka kombinačního pole v bitech t, šířka pole significandu v bitech k, šířka paměti v bitech
101
398
6 176
1
1
1
11
13
17
20
50
110
15 x k/16 - 10
32
64
128
1+5+w+t
1 k/16 + 9
Zdroj IEEE 754-2008 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: d0d1d2. Tabulka 09-02 Parametry dekadického interchange formátu
VŠB-TU Ostrava
106
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Standard IEEE 754-2008 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) −7.0868766365730135 * 10−268 je zakódováno jako řetězec bytů (88 77 66 55 44 33 22 11)H. Tento řetězec lze umístit do paměti od nižší adresy k vyšší adresa jako sekvence 11 22 33 44 55 66 77 88, 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 88 77 66 55 44 33 22 11 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 3.8414120244717310 * 10-226 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 854-1987 byly definovány dekadické formáty pro číselné soustavy nezávislé na základu, [wiki_0906]. Avšak, nový standard IEEE 754-2 008 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-754-2008 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-754-1985. 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 IEEE754-1985. Binary128, je 128-bitový formát se čtyřnásobnou přesností (double-double precision). Tento formát je definován v IEEE-754-2008. Decimal32, tento formát je definován IEEE 754-2008 a to pouze za účelem ukládání dat. Decimal64, tento formát je definován IEEE 754-2008. Decimal128, tento formát je definován IEEE 754-2008 . 8-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-754-1985 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. 0904. Obě formy používají skrytý bit (hiden bit), kterému odpovídá číslice d0 v significandu ve vědecké formě. Je to forma s desetinnou tečkou, m = d0 . d1 d2 … dp-1. Skrytý bit je v normalizované formě roven 1 a v subnormální formě je skrytý bit roven 0, VŠB-TU Ostrava
Binární interchange formát používá normalizovaný nebo subnormální formát.□ 107
9. Čísla v pohyblivé řádové čárce obr. 09-04. 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 d0 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 1 – 127 = -126 Skrytý (hidden) bit -1101 x 24 = -110.1 x 25 = - 11.01 x 26 = -1.101 x 27 +0.0000 1 x 2-124 = + 0.0001 x 2-125 = +0.01 x 2-126
Normalizovaný tvar Skrytý bit – hidden bit.□
Subnormální tvar
Skrytý (hidden) bit Obr. 09-04 Normalizovaný a subnormální tvar pro binary32 Standard IEEE 754-2008 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) Jedinečnost kódování pouze jedno kódování, tzn. je jedinečné - kanonické. canonical.□ 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. Standard IEEE 754-2008 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. 09-05:
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 = d1 d2 … dp −1; vedoucí bit (leading bit) v significandu. d0, je implicitně kódován v posunutém exponentu E. MSB bit significandu d0 je často označován jako skrytý bit.“
VŠB-TU Ostrava
Exponent E je zobrazen pomocí binárního posunutí.□
108
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO 1 bit MSB S Sign
w bitů
LSB MSB
t = p -1 bitů
LSB
E Biased exponent
T Trailing significand field
E0 …………..… Ew-1
d1 d2………………………………………..………..… dp-1
Biased exponent – posunutý exponent.□
Zdroj IEEE 754-2008 Formát binary32 31
S Sign
30
8 bitů
23 22
23 bitů
E Biased exponent
T Trailing significand field
E0 …………..… E7
d1 d2………………………………………..………..… d23
0
Pozice 0 má nejvyšší váhu.□
Obr. 09-05 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 d0, 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 754-2008 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 2w-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 -5 + 7 = 2. Formát slova, který je znázorněna na obr. 09-05, 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. 09-06. 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. d1 = 1 jedná se quiet NaN; a když pole T začíná 0, tzn. d1 = 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. VŠB-TU Ostrava
109
Kódování NaN.□
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. S Sign
E Biased exponent
T Trailing significand field
E0 …………..… Ew-1
d1 d2………………………………………..………..… dp-1
11….11
11….11 11…10 to 00…01 00…00
00…00
T = 11…
sNaN
T = 01…
qNaN
T=0
Nečíselná hodnota
Plus nebo mínus nekonečno
Konečná nenulová hodnota v normalizované formě v = (-1)S * (1+T/2p-1) * 2E - bias T≠0
T=0
Konečná nenulová hodnota v subnormální formě: v = (-1)S * (0+T/2p-1) * 2emin S
Kladná nebo záporná nula, (-1) * 0 * 2 Significand je nulový.
Princip kódování polí.□
emin
Obr. 09-06 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 = 2w-1), velikost pole posunutého exponentu w je 8 a posunutý exponent je v rozsahu 0 ≤ E ≤ 2w-1, to je 0 ≤ E ≤ 255.
Pokud je hodnota posunutého exponentu E samé jedničky, tzn., jde o číslo: 2w - 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 2w-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
Kódování nekonečna.□
110
Čí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 2w – 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…dp-1, což je část significandu. Skrytý bit je 1, a proto vedoucí bit - leading bit je d0 = 1. Celý significand ve vědecké formě je spojení skrytého bitu d0 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 d0 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/2p-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. 𝑣 = (−1)𝑆 ∗ 𝑚 ∗ 2𝐸−𝑏𝑖𝑎𝑠 𝑇
𝑣 = (−1)𝑆 ∗ (1 + 2𝑝−1 ) ∗ 2𝐸−𝑏𝑖𝑎𝑠 𝑇
𝑣 = (−1)𝑆 ∗ (0 + 2𝑝−1 ) ∗ 2𝑒𝑚𝑖𝑛
Kódování pro normalizovaný tvar.□
(0908) (0909) (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; 2p-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 2w-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 d0 = 0. Pole T obsahuje část
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 2-127 = 0.111… x 2-126. 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 2-126 = 0.0, což je kladná nula. □
VŠB-TU Ostrava
111
Kódování pro subnormální tvar.□
9. Čísla v pohyblivé řádové čárce significandu bez skrytého bitu d0. Potom celý significand ve vědecké formě je zřetězení skrytého bitu d0 s radix tečkou a bitovým řetězcem z pole T. Pro výpočet hodnotu subnormální Kódování formy lze použít formulu (0908) nebo (0910). Formule (0910) je odvozena z formuly (09074) pro subnor□ a aplikaje měřítko na hodnotu pole T. Hodnota měřítka je odvozena od přesnosti p, a je rovna mální tvar. 1/2p-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é. NaN -∞
Normal ……………….
Sub. …….
Sub. ……
Normal ………………….
Kódování nuly.□
+∞ NaN
0.0 mínus
-1.0
+1.0
plus
Obr. 09-07 Znázornění hodnot na číselné ose Obr. 09-07 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 754-2008 definuje tyto dekadické inter- Dekadický interchange formáty pro pohyblivou řádovou čárku: decimal32, decimal64, decimal128 a change formát poudecimal{k}. Decimal{k} je formát, který je definován uživatelem a k musí být násobkem žívá quantum na□ 32 a vyšší než 128. Řazení hodnot dekadického interchange formátu na reálné číslové místo exponentu. ose je znázorněno na obr. 09-08. 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 p2 = 24 bitů, emax2 = 127, bias2 = 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 p10 = 7 číslic, emax10 = 96, bias10 = 101. To znamená, že exponent e je v rozmezí -95 ≤ e ≤ +96, ale exponent jako quantum q je v rozmezí -95 ≤ q + p10 - 1 ≤ 96 => -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. □
VŠB-TU Ostrava
112
Čí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.
NaN -∞
Konečná záporná čísla
mínus
-1.0
Konečná kladná čísla
0.0
+1.0
Hodnoty pro dekadický formát.□
+∞ NaN plus
Obr. 09-08 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. 𝑣 = (−1)𝑆 ∗ 𝐶 ∗ 10𝑞
Significand jako koeficient C.□
(0911)
Kde
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.
1 bit MSB S Sign
w + 5 bitů
LSB MSB
t = J x 10 bitů
Quantum je zobrazeno v posunutí.□
LSB
Pozice 0 má G T nejvyšší váhu.□ Combination field Trailing significand field G0 ………….……..… Gw+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 2t–1 Zdroj: IEEE 754-2008
Obr. 09-09 Definice polí pro dekadický formát Pole na obr. 09-09, pro dekadické interchange formáty v pohyblivé řádové čárce, jsou definována standardem IEEE 754-2008. „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
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ů.
Declet je kód, kde 3 dekadické číslice jsou zakódovány do 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 Kanonická definována standardem IEEE 754-2008. Všechny kombinace v polích nebo decletech se forma.□ 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é. Poznámka k decletu, IEEE 754-2008 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 1 024 možných kombinací, je 1 000 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. 09-10. Podrobnější popis je uveden ve standardu IEEE 754-2008. Hodnota NaN je kódována kombinací (G0...G4) = 11111 a bit G5 kóduje quiet a signaling Kódování NaN. Znaménko a zbývající bity pole G nemají žádný vliv na NaN. Pole T obsahuje hodnoty, NaN.□ které rozlišují různé hodnoty NaN. Zbývající bity (G6 až GW+4) jsou v kanonické formě nulové. Nekonečno je kódováno kombinací (G0...G4) = 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 (G5...GW + 4) jsou nulové a pole T je také rovno 0. VŠB-TU Ostrava
114
Kódování nekonečna.□
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO
Pozice 0 má nejvyšší váhu.□
G Kombinační pole G0 …………….……..… Gw+4
G0 ……G5 1111 11… 1111 10…
sNaN qNaN
Nečíselná hodnota
G0 ……G4
Plus nebo mínus nekonečno
1111 0…
E a d0 nebo d0d1d2d3
Dekadicky d0 = 0 nebo binárně d0d1d2d3 = 0000
Konečná nenulová čísla, v = (-1)S * C * 10E - bias
Pole T T=0
Kladná nebo záporná nula (-1)S * 0 * 10q Significand je nula.
Obr. 09-10 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.
𝑣 = (−1)𝑆 ∗ 𝐶 ∗ 10𝐸−𝑏𝑖𝑎𝑠
;
(0912)
Kódování nuly.□
Kódování konečné hodnoty.□
(-1)S x C x 10E-bias
Kde
Significand C je koefiv je konečná hodnota čísla v pohyblivé řádové čárce; cient buď v binární S je znaménko;. nebo dekadické číE je posunutý exponent, který bude zakódován v binární formě; selné soustavě.□ 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.
Obr. 09-11 znázorňuje situaci kódování dekadických significandů C10 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 d0, to je pole G kóduje 4 bity BCD kódu desítkové číslice. Pole T potom VŠB-TU Ostrava
115
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 d1d2d3...dP-1. Dekadický significand C10 ve tvaru koeficientu je zřetězení MSB číslice d0 a dekadických číslic pole T d1d2d3…dp-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 754-2008.
Sestavení dekadického koeficientu C.□
Slovo uložené v k bitech 1 bit MSB S Sign
w + 5 bitů
t = J x 10 bitů
LSB MSB
G Combination field
T Trailing significand field
G0 ………….……..… Gw+4
J decletů dává 3×J = p – 1 číslic
Kódování: Densely-packed decimal
Kódování MSB
S Sign
w + 2 bitů
LSB
LSB MSB
Biased exponent E E0 ………….……..… Ew+1
4 + J x 10 bitů
LSB
Decimal significand C
d0
d1
d2
………………
dp-1
C10 = d0 d1 d2 ….. dp-1, kde di je dekadická číslice v BCD kódu
v = (-1)S x C10 x 10(E2-bias) Obr. 09-11 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 9 999 99910. Odpovídající rozsah v binární číselné soustavě je od 0 do 98 967F16. 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 10012. Proto kombinační pole G pro interchange formát kóduje pouze čísla od 0 do 9. □
Obr. 09-12 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 d0d1d2d3. Pole T obsahuje zbývající bity binárního significandu d4d5d6...dt+3. Binární significand C2 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 d0d1d2d3 + d4d5d6...dt+3. Podrobnější popis je uveden v IEEE 7542008.
VŠB-TU Ostrava
116
Sestavení binárního koeficientu C.□
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Slovo uložené v k bitech 1 bit MSB S Sign
w + 5 bitů
t = J x 10 bitů
LSB MSB
G Combination field
T Trailing significand field
G0 ………….……… Gw+4
t bits
Binární číslo
Kódování MSB
S Sign
LSB
w + 2 bitů
LSB
Biased exponent E E0 ………………… Ew+1
MSB
LSB
4 + J x 10 bitů Significand C
d0d1d2d3
d0d1d2d3 d4d5d6d7 ……………………….. dtdt+1dt+2dt+3
C2 = d0 d1 d2 d3 d4………dt dt+1 dt+2 dt+3 kde di je binární číslice 0 nebo 1
v = (-1)S x C2 x 10(E2-bias) Obr. 09-12 Základní schéma kódování pro binární significand
Počet dekadických číslic n1 1
Počet kombinací 10n1 10
Počet použitých bitů v BCD kódu n2 = n1 x 4 4
Počet možných kombinací 2n2 16
2
100
8
256
156
3
1 000
12
4 096
3 096
Nadbytečnost 2n2 – 10n1 6
Tabulka 09-03 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 di- Declet je kódování gitálním systému. BCD používá 4 bity a tato čtveřice bitů definuje 16 možných kombi- tří desítkových čísnací. Pouze 10 kombinací z 16 je používaných a 6 kombinací je nadbytečných. Tabulka lic do deseti bitů.□ 09 - 03 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 1 024 všech možných kombinací a z toho 1 000 kombinací se použije pro kódování a 24 kombinací je redundantních. Toto je základní myšlenka decletu. Standard IEEE 754-2008 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
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 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
Dekadické číslice 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)
a
b
c
d
e
f
1
0
0
i
0abc 0def 100i
(0-7)(0-7)(8-9)
a
b
c
g
h
f
1
0
1
i
0abc 100f 0ghi
(0-7)(8-9)(0-7)
g
h
c
d
e
f
1
1
0
i
100c 0def 0ghi
(8-9)(0-7)(0-7)
a
b
c
1
0
f
1
1
1
i
0abc 100f 100i
(0-7)(8-9)(8-9)
d
e
c
0
1
f
1
1
1
i
100c 0def 100i
(8-9)(0-7)(8-9)
g
h
c
0
0
f
1
1
1
i
100c 100f 0ghi
(8-9)(8-9)(0-7)
x
x
c
1
1
f
1
1
1
i
100c 100f 100i
(8-9)(8-9)(8-9)
Tři malé číslice Dvě malé číslice, jedna velká
Jedna malá číslice, dvě velké Tři velké číslice
Zdroj: http://en.wikipedia.org/wiki/Densely_packed_decimal
Tabulka 09-04 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. 09-13, 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í.□
1.0000 0000 00 x 2e Pro poloviční přesnost:
Zaokrouhlování nejblíže k sudé, standardní zaokrouhlování.
1.0000 0000 01 x 2e 0.0000 0000 01 x 2e Obr. 09-13 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 754-2008].
VŠB-TU Ostrava
118
Čí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á- Zaokrouhlování nejlenost obou nejbližších bodů stejná. V desítkové číselné soustavě, to je číslo 5, blíže hodnotě.□ 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 Zaokrouhlování k nejpřesně uprostřed intervalu, zaokrouhlí se na sudou hodnotu. Toto za- bližší a sudé - default.□ okrouhlová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 Zaokrouhlování k nejčíslo přesně uprostřed intervalu, zaokrouhluje se k nejbližší hodnotě bližší a pryč od nuly.□ 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 Zaokrouhlování směrem směru, který je předem definován. Zaokrouhlení směrem k 0, (Round toward 0) – zaokrouhlování k nule - truncation.□ směrem k 0. Tento princip zaokrouhlení je znám také jako zkrácení - truncation. Zaokrouhlování směrem Zaokrouhlení směrem k +∞, (Round toward +∞) – zaokrouhlo- plus nekonečnu – směrem vání směrem k plus nekonečnu, a tento princip je také znám pod nahoru.□ názvem zaokrouhlení směrem nahoru. Zaokrouhlení k nejbližší hodnotě
Číslo : + 20.4 + 20.5 +20.6 : + 21.4 + 21.5 + 21.6 : - 20.4 - 20.5 - 20.6 : - 21.4 - 21.5 - 21.6 :
Směrové zaokrouhlení ZaokrouhZaokrouhZaokrouhlení k 0 lení k +∞ lení k -∞
nejblíže k sudé
pryč od nuly
+ 20 + 20 + 21
+ 20 + 21 + 21
+ 20 + 20 + 20
+ 21 + 21 + 21
+ 20 + 20 + 20
+ 21 + 22 + 22
+ 21 + 22 + 22
+ 21 + 21 + 21
+ 22 + 22 + 22
+ 21 + 21 + 21
- 20 - 20 - 21
- 20 - 21 - 21
- 20 - 20 - 20
- 20 - 20 - 20
- 21 - 21 - 21
- 21 - 22 - 22
- 21 - 22 - 22
- 21 - 21 - 21
- 21 - 21 - 21
- 22 - 22 - 22
Tab. 09-05 Výsledky u rozdílných typů zaokrouhlování VŠB-TU Ostrava
119
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 -∞. 1. 2. 3. 4. 5.
A = -0.735 A = -25.145 A = 2.575 A = 5.24501 A = -3.12501
Výsledek: a) -0.74; b) -0.74; c) -0.73; d) -0.73; e) -0.74; Výsledek: a) -25.14; b) -25.15; c) -25.14; d) -25.14; e) -25.15; Výsledek: a) 2.58; b) 2.58; c) 2.57; d) 2.58; e) 2.57; Výsledek: a) 5.25; b) 5.25; c) 5.24; d) 5.25; e) 5.24; 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:
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
Hodnota NaN.□
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO [wiki_0915], [wiki_0916], [Muller_2010], [wiki_0908], [Goldberg_1991].
[Ergovac_Lang_2004],
[IEEE
754-2008],
9.11 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 754-2008]:
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.
Hodnota nekonečno.□
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 754-2008]:
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.
9.12 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 754-2008]. Skutečná realizace pohyblivé řádové čárky může stanovit další výjimky. Základní výjimky podle standardu IEEE 754 jsou uvedené níže:
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
Exception or flags.□
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.
9.13 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 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 2008. 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 754-2008 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 754-2008, [spel_0901]:
9.14 Reference [Burks_1946]
VŠB-TU Ostrava
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:
122
Realizace.□
Čí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. 123.45 would be carried in the machine as (0.12345,03), where the 3 is the exponent of 10 associated with the number.' [Cowlishaw_2000] Cowlishaw, M. F. (2000-10-03). "Summary of Densely Packed Decimal encoding". Retrieved 2008-09-10; http://speleotrove.com/decimal/DPDecimal.html; on line 2013-07-12 [Cowlishaw_2002] Cowlishaw, M. F. (May 2002). "Densely packed decimal encoding". IEE Proceedings – Computers and Digital Techniques (Institution of Electrical Engineers) 149 (3): 102–104. doi:10.1049/ip-cdt:20020407. ISSN 1350-2387. [IEEE 754-1985] IEEE Std 754-1985, IEEE Standard for Binary Interchange-Point Arithmetic, 1985 [Ergovac_Lang_2004] Milos D. Ercegovac, Tomas Lang: Digital Arithmetic; Morgan Kaufmann Publishers, 2004, ISBN 1-55860-798-6 [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 754-2008]
IEEE Std 754™-2008, IEEE Standard for Interchange-Point Arithmetic, 29 August 2008, revision of IEEE 754 – 1985
[ISO/IEC_0901] ISO/IEC 10967-1:2012 - 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 978-08176-4704-9; e-ISBN 978-0-8176-4705-6 [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. 327–341. [RFC 0382]
MATHEMATICAL SOFTWARE ON THE ARPA NETWORK; 1972; https://tools.ietf.org/html/rfc382; on line 2014-01-29
[Rojas_1997]
R. Rojas: "Konrad Zuse’s Legacy: The Architecture of the Z1 and Z3". IEEE Annals of the History of Computing 19 (2): 5–15. 1997; http://ed-thelen.org/comp-hist/Zuse_Z1_and_Z3.pdf; on line 2013-06-18
[spel_0901]
General Decimal Arithmetic; http://speleotrove.com/decimal/; on line 201307-18
VŠB-TU Ostrava
123
9. Čísla v pohyblivé řádové čárce [wiki_0901]
Floating point; http://en.wikipedia.org/wiki/Interchange_point; on line 2013-06-13
[wiki_0902]
Scientific notation; http://en.wikipedia.org/wiki/Scientific_notation; on line 2013-06-13
[wiki_0903]
Engineering notation; http://en.wikipedia.org/wiki/Engineering_notation; on line 2013-06-13
[wiki_0904]
Normalized number; http://en.wikipedia.org/wiki/Normalized_number; on line 2013-06-13
[wiki_0905]
Significand; http://en.wikipedia.org/wiki/Significand; on line 2013-06-13
[wiki_0906]
IEEE floating point; http://en.wikipedia.org/wiki/IEEE_interchange_point; or http://en.wikipedia.org/wiki/IEEE_754; on line 2013-06-13
[wiki_0907]
Densely packed decimal; http://en.wikipedia.org/wiki/Densely_packed_decimal; on line 2013-07-12
[wiki_0908]
NaN; http://en.wikipedia.org/wiki/NaN; on line 2013-07-17
[wiki_0909]
Denormal number; http://en.wikipedia.org/wiki/Subnormal_number; on line 2013-07-18
[wiki_0910]
Half-precision interchange-point format; http://en.wikipedia.org/wiki/Binary16; on line 2014-07-22
[wiki_0911]
decimal32 interchange-point format; http://en.wikipedia.org/wiki/Decimal32; on line 2014-07-22
[wiki_0912]
Minifloat; http://en.wikipedia.org/wiki/Minifloat; on line 2014-07-22
[wiki_0913]
International System of Units; http://en.wikipedia.org/wiki/SI; on line 201408-21
[wiki_0914]
Trap (computing); http://en.wikipedia.org/wiki/Trap_(computing); on line 2014-08-21
[wiki_0915]
Interrupt handler; http://en.wikipedia.org/wiki/Interrupt_service_routine; on line 2014-08-21
[wiki_0916]
Interrupt; http://en.wikipedia.org/wiki/Interrupt; on line 2014-08-21
[Zuse_2008]
H. Zuse: Konrad Zuses Z3 in Detail; April 2008; http://staffweb.worc.ac.uk/DrC/Courses%2020089/Comp%203104/Reading%20Materials/Z3-detail-english.pdf; on line 201306-13
VŠB-TU Ostrava
124
Čí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šší Kanonický forpřesnost, než vyžaduje interchange formát pro pohyblivou řádovou čárku. Zvyšující se počet mát je formát 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 definovaný v celočíselné části o jeden řád, 1.01B + 1.01B = 10.1B, 9D + 4D = 13D. Násobení má maximální IEEE 754.□ velikost výsledku, když sečteme počet číslic obou operandů, 1.01B * 1.01B = 1.1001B nebo i v desítkové soustavě 8D * 16D = 128D. 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 Dodatečné bit očekává, že výsledek bude v kanonickém interchange formátu. Po každém provedení aritme- celočíselné části tické operace v pohyblivé řádové čárce, je nutné provést normalizaci, zaokrouhlení a nasta- výsledku.□ vení výjimek. Normalizace je úprava čísla do kanonického binárního interchange formátu. Standard IEEE 754-2008 definuje normalizovanou nebo subnormální formu significandu v binárním interNormalizace bichange formátu. Obě formy používají significand ve vědeckém zápisu. Hodnoty těchto forem nárním formátu.□ jsou definovány pomocí formulí (1001) a (1002). 𝑇
𝑣 = (−1)𝑆 ∗ (1 + 2𝑝−1 ) ∗ 2𝑒 𝑇
(1001)
𝑣 = (−1)𝑆 ∗ (0 + 2𝑝−1 ) ∗ 2𝑒𝑚𝑖𝑛
(1002)
𝑣 = (−1)𝑆 ∗ 𝐶 ∗ 10𝑞
(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/2p-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
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 * 23. 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 * 2-126. □ Dekadický interchange formát v pohyblivé řádové čárce má hodnoty, které jsou definované Preferovaná vzorcem (1003). Significand je koeficient, což je dekadické číslo bez znaménka nebo binární forma v dekadicčíslo bez znaménka. Significand v dekadickém interchange formátu preferuje jen určité kém formátu.□ formy, obr. 10-01. 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 754-2008 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]. Číslo
1234 * 100
1234567 * 100
1234567111 * 100
Significand, kde p = 7
0001234 * 100
1234567 * 100
1234567 * 103
0012340 * 10-1 0123400 * 10-2 1234000 * 10-3
Obr. 10-01 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 Dodatečné bity.□ 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. dp. Některé výsledky operací mohou □ mít celočíselnou část výsledku rovnu nule. V tomto případě se provádí normalizace Guard bit. 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].
VŠB-TU Ostrava
126
Čí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 2.500… 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,500… 01 má již sticky bit roven jedné, a pak nejbližší číslo je 3.
Round bit.□
Sticky bit.□
Vypočítaný výsledek Logical OR
Přesnost p MSB 0
LSB p-1
GRS
G - Guard bit
R - Round bit Dodatečné integer bity
Significand
S - Sticky bit
Obr. 10-02 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. 10-02. 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.
10.1 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 754 2008 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.
VŠB-TU Ostrava
Zaokrouhlení nejblíže a k sudé je výchozím (default) zaokrouhlováním.□
127
10. Aritmetika v pohyblivé řádové čárce
Zaokrouhlení směrem mínus nekonečnu.
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. 10-03. 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].
Reálná číselná osa
Sousední čísla v pohyblivé řádové čárce s přesností p
ulp
FP data uprostřed ulp
½ ulp
½ ulp
Obr. 10-03 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. Binárně, ulp = 1/2p-1 * 2e
(1004)
Dekadicky, ulp = 1 * 10q
(1005)
Kde
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. 10-04 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/2p-1 * 2e = 0.0000 0000 0000 0000 0000 001B * 2e = 0.0000 02H * 2e. ½ ulp = 0.0000 0000 0000 0000 0000 0001B * 2e = 0.0000 01H * 2e. Všechny dekadické formáty má significand stejnou hodnotu ulp = 1 * 10q and ½ ulp = 0.5 * 10q. □
VŠB-TU Ostrava
128
ulp - unit in the last place.□
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO a = 1 234 567 * 10-4 a = 123.456 7 a+b+c 159.024 248
round 159.024 2
b = 3 456 746 * 10-5 b = 34.567 46 a+b round plus c round
158.024 16 158.024 2 159.024 288 159.024 3
a+c round plus b round
c = 1 000 088 * 10-6 c = 1.000 088
124.456 788 124.456 8 159.024 248 159.024 2
b+c 35.567 548 round 35.567 5 plus a 159.024 248 round 159.024 2
Obr. 10-04 Možnosti chyb při zaokrouhlování Aplikace jednoho zaokrouhlování namísto dvou také generuje opět rozdílný výsledek, obr. 10-04. 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. 10-05 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. 10-06 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]. LSB 0 0 0 0 1 1 1 1
R 0 0 1 1 0 0 1 1
S 0 1 0 1 0 1 0 1
Operace +0 +0 +0 + ½ ulp +0 +0 + ½ ulp + ½ ulp
Poznámka
1 na pozici p
1 na pozici p 1 na pozici p
Obr. 10-05 Zaokrouhlování nejbližší a k sudé Znaménko + + + + -
R
S
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
Operace pro směrové zaokrouhlení k nule k+∞ k-∞ +0 +0 +0 +0 + 1 ulp +0 +0 + 1 ulp +0 +0 + 1 ulp +0 +0 +0 +0 +0 +0 + 1 ulp +0 +0 + 1 ulp +0 +0 + 1 ulp
Poznámka
Obr. 10-06 Schéma směrového zaokrouhlování VŠB-TU Ostrava
129
MAC operace.□
Zaokrouhlování je přičtení 0, ½ ulp nebo ulp.□
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 754-2008]. Praktická realizace používá více výjimek, než definuje stan- Výjimky dard IEEE 754-2008. První nastavení výjimek je provedeno pomocí operace nebo funkce. exceptions.□ Druhé nastavení se provádí normalizací a zaokrouhlováním. Více informací najdete v předchozí kapitole. Podle standardu IEEE 754-2008 existují tyto základní výjimky:
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.
10.3 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 Závěrečné □ výsledku. Tyto operace používají guard, round a sticky bity. Poslední kroky po každé operaci operace. jsou, [Mudawar_2014]:
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
Binárně
82.345 x 10123
8.2345 x 10124
0.082345 x 10126
8.2345 x 10124
10.101 x 236
1.0101 x 237
0.010101 x 239
1.0101 x 1037
Posuvy a úprava exponentu.□
Obr. 10-07 Principy úpravy exponentu, když je číslo posunuto
VŠB-TU Ostrava
130
Čí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. 10-07 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.
Sticky bit je logická operace OR již z dříve vypočtených bitů, pokud existují.
Práce s guard, round a sticky bity.□
OR G - Guard bit R - Round bit G R S 10.011 1 0 0 1.001 1 1 0 0
S - Sticky bit
To je výsledek výpočtu s vyznačením guard, round a sticky bit. Normalizace pomocí posuvu doprava, po které guard bit zaniká bez náhrady. Nový round bit a nový sticky bit je vypočten.
OR
1.001 1 1 1.001 1 +0.000 1 1.010
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. 10-08 Posuvy a výpočty round a sticky bitů Příklad konečných operací v binárním formátu je na obr. 10-08. 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. 10-05 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.
10.4 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. 10-09. 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.
VŠB-TU Ostrava
131
Minifloat formát.□
10. Aritmetika v pohyblivé řádové čárce pro 8 bitů, p = 4
S E E E Sign
0.0
E T T T
Biased exponent
0.001 x 2-6 0.11 x 2-6 Subnormal E = 0x0
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ý.
Kladná číselná osa 1.000 x 2-6
1.111 x 2+7 Normal E je v rozsahu od 1 do 0xE
T=0
T≠0
Infinity E = 0xF
NaN E = 0xF
Obr. 10-09 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í 12333 * 101 + 12665 * 10-2 ve formátu decimal32 12333000 * 10-2 12665 * 10-2
Součet decimálních čísel.□
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í.
12333000 + 12665 12345665
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.
1234566 R S
G - Guard bit R - Round bit
1234566 5 0
Round bit a sticky bity jsou vyznačeny. Sticky bit je nula.
1234566
Zaokrouhlování nejbližší a k sudé. Číslo leží uprostřed ulp. Bez přičtení.
1234566 * 10-1
S - Sticky bit
Výsledek s exponentem. Exponent byl zvýšen. Obr. 10-10 Dekadické sčítání
VŠB-TU Ostrava
132
Čí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. 10-10 a obr. 10-11 představují příklady pro sčítání a odčítání. Odčítání 1.001 * 2-3 - 1.101 * 2-2 v minifloatu Rozdíl v minifloat formátu.□ 0.1001 * 2-2 -1.0110 * 2-2 0 1001 - 1 0110 000 1001 +110 1010
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.
111 0011
V případě záporného výsledku, je použit dvojkový doplněk.
000 1101
Znaménko výsledku je mínus. G - Guard bit
G R S 0 110 1 0 0
Guard bit, round bit a sticky bit jsou označeny. Round a sticky bity jsou nulové.
1 101 0 0
Je aplikována normalizace. Significand je posunut doleva, a exponent je snížen.
1 101
Zaokrouhlení k nejbližší a k sudé je aplikováno. Bez přičtení.
-1.110 * 2-3
Výsledek s exponentem.
R - Round bit S - Sticky bit
Obr. 10-11 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 754-2008]. sum = (± m1 x 2E1) + (± m2 x 2E2) = (± m1 x 2E1) + (± m3 x 2E2 + (E1-E2)) = (±m1) + (±m3) x 2E1
(1006)
dif = (± m1 x 2E1) - (± m2 x 2E2) = (± m1 x 2E1) - (± m3 x 2E2 + (E1-E2)) = (±m1) - (±m3) x 2E1 VŠB-TU Ostrava
(1007) 133
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+(E1E2)). 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 (-1.110 * 2-5) *(+1.100 * 2+3) 1110 * 1100 111000 1 110 10 101000 10.101000
Znaménko výsledku je mínus. Exponent výsledku je -2. Násobení celých čísel, kde operandy mají měřítko 1/23.
Výsledek má měřítko 1/26.
Násobení v minifloat formátu.□
1.010 1 00
Normalizace je aplikována. Significand je posunut doprava a exponent je zvýšen.
1.010 1 0
Round bit a sticky bit jsou vyznačeny. Sticky bit je operace logického OR zbývajících bitů.
1.010
Zaokrouhlení nejblíže a k sudé je aplikováno. Bez přičtení.
-1.010 * 2-1
Výsledek s exponentem. Exponent byl zvýšen.
G - Guard bit R - Round bit S - Sticky bit
Obr. 10-12 Binární násobení
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 kroNásobení.□ VŠB-TU Ostrava
134
Čí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/22(p-1). Měřítka výsledku určuje polohu radix tečky. Další kroky jsou normalizace, zaokrouhlování a nastavení výjimky. Obr. 10-12 a obr. 10-13 ukazují příklady násobení v binární a dekadické číselné soustavě. Násobení (+123 * 10-15) * (-456 * 2+9) ve formátu decimal32 (+123 * 10-15) *(-456 * 10+9)
Znaménko výsledku je minus. Exponent výsledku je -6. Násobení v dekadickém formátu.□
123123 * 789 97144047
Násobení.
9714404
Výsledek má 8 číslic, požadavek přesnosti je p = 7. Výsledek je posunut doprava, exponent se inkrementuje.
9714404 7 0
Round a sticky bity jsou odvozeny z původního výsledku.
G - Guard bit R - Round bit S - Sticky bit
9714404 + 0000001 9714405 -9714405 * 10-5
Zaokrouhlení k nejbližší a sudé značí přičtení ulp
Výsledek s exponentem. Exponent byl zvýšen. Obr. 10-13 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 754-2008]. Výsledek m1*m2 má velikost číslice 2p, kde p je přesnost. product = ((-1)S1 m1 x 2E1) * ((-1)S2 m2 x 2E2) = (-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
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].
10.7 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 Dělení.□ [IEEE 754-2008]. quotient = ((-1)S1 m1 x 2E1) / ((-1)S2 m2 x 2E2) = (-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.
10.8 Reference [EETimes_1001] Clive Maxfield: Design How-To, An introduction to different rounding algorithms; EETimes 1/4/2006, http://www.eetimes.com/document.asp?doc_id=1274485&page_number=1; on line 2014-08-04 [Ergovac_Lang_2004] Milos D. Ercegovac, Tomas Lang: Digital Arithmetic; Morgan Kaufmann Publishers, 2004, ISBN 1-55860-798-6 [IEEE 754-2008] IEEE Std 754™-2008, IEEE Standard for Interchange-Point Arithmetic, 29 August 2008, revision of IEEE 754 – 1985 [Internet_1001]Decimal Arithmetic Specification, Arithmetic operations, material of IBM, http://speleotrove.com/decimal/daops.html; on line 2014-08-04 [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. 113-130, 1999; http://www.cl.cam.ac.uk/~jrh13/papers/fparith.pdf; on line 2014-08-05
VŠB-TU Ostrava
136
Čí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-13-978-0471-73278-5 [Muller_2005] Jean-Michel Muller: On the definition of ulp (x); ACM Transactions on Mathematical Software, Vol. V, No. N, November 2005; http://ljk.imag.fr/membres/Carine.Lucas/TPScilab/JMMuller/ulp-toms.pdf; on line 2014-08-05 [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 9780-8176-4704-9; e-ISBN 978-0-8176-4705-6 [Koren_2008] Israel Koren: Computer Arithmetic Algorithms; A. K. Peters 2008; ISBN 1-56881-160-8 [Mudawar_2014] Muhamed Mudawar: Floating point; presentation for subject Computer architecture; King Fahd University of Petroleum and Minerals; http://opencourseware.kfupm.edu.sa/colleges/ccse/coe/coe308/files%5C2-Lecture_Notes_06-InterchangePoint.pdf; on line 29-01-2014 [RFC 0382]
MATHEMATICAL SOFTWARE ON THE ARPA NETWORK; 1972; https://tools.ietf.org/html/rfc382; on line 2014-01-29
[wiki_1001]
Floating point; http://en.wikipedia.org/wiki/Interchange_point; on line 2014-08-06
[wiki_1002]
Multiply–accumulate operation; http://en.wikipedia.org/wiki/Multiply%E2%80%93accumulate_operation; on line 2014-08-05
[wiki_1003]
Accuracy problems; http://en.wikipedia.org/wiki/Interchange_point#Accuracy_problems; on line 2014-08-06
[wiki_1004]
Unit in the last place; http://en.wikipedia.org/wiki/Unit_in_the_last_place; on line 2014-01-31
[wiki_1005]
Rounding; http://en.wikipedia.org/wiki/Rounding; on line 2014-08-06
[wiki_1006]
IEEE floating point; http://en.wikipedia.org/wiki/IEEE_interchange_point; on line 2014-08-06
[wiki_1007]
Division algorithm; http://en.wikipedia.org/wiki/Division_algorithm; on line 2014-08-26
[Zdralek_2014] Jaroslav Zdralek, Zdenka Chmelikova: Introduction to Digital Systems for Joint Teaching Programme of BUT and VSB-TUO; VSB Ostrava 2014; ISBN 978-80-248-3646-1
VŠB-TU Ostrava
137
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. ASCII – American StandPůvodní ASCII kód obsahuje pouze americkou abecedu. Později, kdy byly zavedeny ard Code for Information osobní počítače, byl ASCII kód upraven přidáním národních abeced. V současné Interchange.□ 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.
11.1 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 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. 11-01 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
Čí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. 11-01. Unicode definuje znak pomocí 4 vět, [Unicode_1101]:
Znak je nejmenší komponent psaného jazyka, který má sémantickou hodnotu; odka□ zuje na abstraktní význam nebo tvar, raději než na konkrétní tvar (viz také glyf), Znak. 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.
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. 11-01 a obr. Znak a glyf. □ 11-02, [Unicode_1103]. Jeden znak může mít jeden nebo více glyfů a naopak. Znak
Další možnosti glyfů a
a, a, a, a, a, a
9 (c) Pts Ã
9, 9, 9, 9, 9 © ₧ ~a
Poznámka Jeden znak a více glyfů Jeden znak a více glyfů Více znaků převedeno do jednoho glyfu Více znaků převedeno do jednoho glyfu Jeden znak a dva glyfy
Obr. 11-02 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 Kódování znaků. □ 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]. [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]. VŠB-TU Ostrava
139
Sada znaků. □
Font je soubor, který definuje glyfy pro znaky.□
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á- Skript. □ 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é Serif, San Serif, typografické vlastnosti, které jsou sdíleny všemi fonty se stejným řezem písma. Proto více handwriting, □ fontů má typické řezy písma a každý typ řezu písma má své jméno. Mezi nejznámější patří Console. Serif, Sans Serif (také známý jako gothic), handwriting, calligraphy, console a další. Příklady písem jsou na obr. 11-03. Text The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog
Řez písma Serif San Serif Handwriting Console Calligraphy
Font Times New Roman Arial Blackadder ITC Consolas Lucida calligraphy
Obr. 11-03 Ř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. 11-04. 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 de□ finované jako samostatné soubory, nebo matematicky, pomocí vektorových písem. Definice Italic a bold. 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
Obr. 11-04 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]. Proporcionální a Obr. 11-05 ukazuje rozdíl mezi těmito dvěma formáty. Proporcionální písmo znamená, že neproporciokaždé písmeno má jinou šířku a neproporcionální, že každé písmeno má konstantní šířku. nální. □ Ostatní termíny pro neproporcionální písmo jsou „monospaced“, „fixed space“ a „console typeface“.
VŠB-TU Ostrava
140
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO
Text
Písmo
imlw
Proporcionální
imlw
Neproporcionální nebo „monospaced“ nebo „console“ Obr. 11-05 Šíř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. 11-06, 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, inObr. 11-06 Reliéfní tisk v psacím stroji tenzitu barvy a dalších vlastností. Dot má různé významy http://en.wikipedia.org/wiki/File:Typewriters.jpg 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. 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. 11-07 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. 11-07. 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. 11-07. VŠB-TU Ostrava
141
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.
11.2 Fonty Font je soubor, který definuje glyfy pro každý znak. První fonty písma byly použity v typograFonty. □ fické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].
Bitmapové fonty se skládají z definice bodů nebo pixelů v matici pro zobrazení kaž- Bitmapový font. □ 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é Vektorové fonty. □ 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ů.
11.3 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 Bitmapový font definována podle typu zařízení, nebo společnosti. První použitelná velikost matice byla 5 krát je také nazýván 7 bodů a dnes je normální velikost 12 krát 16 bodů. Každý glyf je vykreslen v této matici. rastrový font. □ 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. 11-08.
Obr. 11-08 Příklady rastrových písem a semigrafických symbolů
VŠB-TU Ostrava
142
Čí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ší vlastANSI escape nosti, které definují barvu, intenzitu světla, inverzi, blikání a tak dále. Tyto vlastnosti v textokódy. □ vém terminálu jsou definovány ANSI escape kódy, [wiki_1112]. 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.
11.4 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. 11-09. 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. 11-09 Principy outline fontu v roce 1980. 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 do- PostScript je jakumentech. V roce 1980 Apple a Microsoft vytvořili každý svůj vlastní formát s názvem Tru- zyk pro vektoro□ eType. Na počátku roku 1990, sada TrueType písem byla poprvé použita v operačních systé- vou grafiku. 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 14496-22: 2009, Information technology – Coding of audio-visual objects – Part 22: Open Font Format. OpenType je registrovaná Více informací naleznete v literatuře [wiki_1113], [wiki_1114] a [wiki_1115]. ochranná známka Hlavní výhodou outline písma je jejich matematická definice a některé vlastnosti glyfů mohou Microsoft Corpobýt modifikovány úpravou parametrů v algoritmu. Většina outline fontů jsou proporcionální ration. □ 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.
11.5 Stroke fonty 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. 1110, [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 VŠB-TU Ostrava
143
CJKV je zkratka pro China, Japan, Korea, Vietnam. □
11. Znaky a Unicode "psům vstup zakázán", obr. 11-11, 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: http://en.wikipedia.org/wiki/File:Perros_No.svg
Zdroj: http://en.wikipedia.org/wiki/File:8_Strokes_of_Han_Characters.svg
Obr. 11-10 Stroky ve znaku CJKV
Obr. 11-11 Stroky v ideogramu
11.6 ASCII American Standard Code for Information Interchange - ASCII je kódovací tabulka znaků, která ASCII. □ 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 1986. 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. 1112. LSB MSB
0 1 2 3 4 5 6 7
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS ! " # $ % & ' ( ) * + , 0 1 2 3 4 5 6 7 8 9 : ; < @ A B C D E F G H I J K L P Q R S T U V W X Y Z [ \ ` a b c d e f g h i j k l p q r s t u v w x y z { |
CR GS = M ] m }
SO RS . > N ^ n ~
SI US / ? O _ o DEL
Obr. 11-12 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 Unicode jména. 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. 11-13, je možné vidět způsoby generování těchto kódů jako stříškový zápis (caret VŠB-TU Ostrava
144
WWW používá UTF-8.
Čí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. 11-13 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 Unicode code 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
0A
U+0009
U+000A
^I
^J
CHARACTER TABULATION
\t
\n
HT
Horizontal Tabulation
LF
LINE FEED (LF)
NL EOL
New line End of line LINE TABULATION
0B
U+000B
^K
\v
VT
Vertical Tabulation
0C
U+000C
^L
\f
FF
FORM FEED
0D
U+000D
^M
\r
CR
CARRIAGE RETURN (CR)
1B 7F
U+001B U+007F
^[ ^?
\e \?
ESC DEL
ESCAPE DELETE
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]. Viz popis níže Vymaž
Obr. 11-13 Význam řídicích kódů
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. ESCAPE
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
Řídicí kódy C0
145
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. 11-14. Další názvy znaků mohou být odvozeny z této tabulky. ASCII code hexadecimal 41 42
Unicode point U+0041 U+0042
61 62
U+0061 U+0062
Character
Unicode name [Unicode_1108]
A B
LATIN CAPITAL LETTER A LATIN CAPITAL LETTER B
a LATIN SMALL LETTER A b LATIN SMALL LETTER B : : Obr. 11-14 Tabulka kódů a názvů pro znaky abecedy
Obr. 11-15 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ů. ASCII code 20 21 22
Unicode point U+0020 U+0021 U+0022
HTML code
Character
Unicode name [Unicode_1108]
"
! “
SPACE EXCLAMATION SIGN QUOTATION MARK
23
U+0023
#
NUMBER SIGN
24 25 26 27 28
U+0024 U+0025 U+0026 U+0027 U+0028
$ % & ' (
DOLLAR SIGN PERCENT SIGN AMPERSAND APOSTROPHE LEFT PARENTHESIS
29
U+0029
)
RIGHT PARENTHESIS
2A
U+002A
*
ASTERISK
2B
U+002B
+
PLUS SIGN
2C
U+002C
,
COMMA
2D
U+002D
-
HYPHEN-MINUS
VŠB-TU Ostrava
& ' &lparen; &rparen;
Other codes or names
Double quotes or inverted commas Hash or hash key on the telephone Sharp - ♯ is a different glyph and it is used in music
Logical and Bracket, parentheses
%2B in URL Plus Decimal separator %2D in URL Minus, hyphen 146
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO 2E
U+002E
.
FULL STOP
2F
U+002F
/
SOLIDUS
3A 3B
U+003A U+003B
: ;
COLON SEMICOLON
3C
U+003C
<
LESS-THAN SIGN
3D
U+003D
=
EQUALS SIGN
3E
U+003E
3F 40 5B 5C 5D
U+003F U+0040 U+005B U+005C U+005D
<
>
>
GREATER-THAN SIGN
? @ [ \ ]
QUESTION MARK COMMERCIAL AT LEFT SQUARE BRACKET REVERSE SOLIDUS RIGHT SQUARE BRACKET
5E
U+005E
^
CIRCUMFLEX ACCENT
5F
U+005F
_
LOW LINE
60 7B 7C 7D 7E
U+0060 U+007B U+007C U+007D U+007E
` { | } ~
GRAVE ACCENT LEFT CURLY BRACKET VERTICAL LINE RIGHT CURLY BRACKET TILDE
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. In programming languages, it is an abbreviation gt or .gt. In shell script (Linux) it means the redirection At sign Backslash In ASCII caret, Unicode caret is the ‸ glyph, (U+2038) CARET Underscore, Understrike; Underbar; Underline
Vertical bar, logical or, pipe Logical not
Obr. 11-15 Tabulka kódů a názvů pro znaky mimo abecedu
11.7 Kódové stránky 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 Kódová stránka klasickém 7-bitovém ASCII kódování a nové znaky a řídicí kódy byly přidány v rozsahu od 0x80 437. □ do 0xFF, obr. 11-06. Rozmezí od 0x20 do 0x7F 8-bitového kódování odpovídá 7-bitovému kódu ASCII.
Zdroj: http://en.wikipedia.org/wiki/File:Codepage-437.png Obr. 11-16 Kódová stránka 437 VŠB-TU Ostrava
147
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. 11-16. 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í Kódové stránky. □ 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 8859-1, ISO 88592, ISO 8859-3, 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í:
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 6429. 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 ISO8859-1 jsou obdobné stránky s latinkou pro západní Evropu, [wiki_1121], [wiki_1123]. Windows 1250 a ISO8859-2 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
Čí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].
11.8 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 Co a C1 řídicí standardem ISO/IEC 6429. Řídicí kód C0 odpovídá definici ASCII v rozmezí od 0 do 0x1F 8- kódy. bitové tabulky kódování, [wiki_1125]. Ří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
85
U+0085
ESC+E
NEL
NEXT LINE (NEL)
9B
U+009B
ESC+[
CSI
CONTROL SEQUENCE INTRODUCER
Description Equivalent to CR+LF. Used to mark end-of-line on some IBM mainframes. Used to introduce control sequences that take parameters. ANSI escape sequence
Obr. 11-17 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
11. Znaky a Unicode egyptské hieroglyfy, indiánské jazyky atd. Proto je žádoucí, aby existovalo universální kódování znaků všech abeced. Také, dnešní dokumenty nejsou jen textové, ale mohou obsahovat vědecké symboly, historické symboly, grafické informace, zvukové informace, atd. Práce na novém standardu začaly začátkem 90 let minulého století. Vznikly dvě skupiny, které se problému věnovaly a to Unicode a ISO/IEC. Unicode doporučení bylo také publikováno jako ISO/IEC standard, protože závěru obou skupin byly velmi blízké. Ale známější je pojem Unicode a poslední verze je 7 z roku 2014. Dnes, význam Unicode spočívá v nasazení v reálné praxi a ve formě formátu UTF se s ním můžeme setkat v, [wiki_1107]:
“Unicode is a computing industry standard for the consistent encoding, representation and handling of text expressed in most of the world's writing systems.” □ Source http://en.wikipedia.org/wiki/Unicode
UTF-8 se stal dominantním kódováním znaků v prostředí World Wide Web Internet Mail Consortium (IMC) doporučuje, aby všechny programy elektronické pošty zobrazovaly a používaly formát UTF-8. Konsorcium W3C doporučuje UTF-8 jako defaultní kódování v jejich standardech týkajících se XML a HTML UTF-8 je také velmi rozšířené kódování používané v operačních systémech, programovacích jazycích, API – aplikačních rozhraních a počítačových aplikacích, [wiki_1107] UTF-8 je defaultní kódování Internetu, [oracle_1101]. U+xxxx JMÉNO ZNAKU TVAR U+
Hexa číslo
U+0031 DIGIT ONE 1 Název znaku
tvar Pořadí není povinné
Obr. 11-18 Zápis znaku v Unicode Poznámka ke kódovacímu prostoru Původně Unicode byl definován do 32 bitového prostoru a později tento prostor byl omezen na 21 bitů. Proto je Unicode známý jako 32 bitové kódování znaků. □ Unicode používá 1 114 112 kódových bodů a odpovídající rozsah kódových pozic je od 0 do 0x10 FFFF. Jedná se 21 bitový prostor, kde každý znak je definován Unicode pozicí nebo kódovou pozicí – Unicode point or code point, jménem a základním tvarem, obr. 11-18. Každá část této definice má svoje pravidla zápisu a pořadí není povinné.
Unicode pozice je hexadecimální číslo, které odpovídá znaku. Je povinné uvádět pozici minimálně na čtyři hexadecimální číslice. Z toho plyne, že kódové pozice z Basic Multilingual Plane se zapisují 4 číslicemi. Unicode jméno je textový název či popis znaku. Standard používá k zápisu malé kapitálky. Základní tvar - basic glyph, je grafická reprezentace znaku [wiki_1108]. Typeface potom může měnit grafickou reprezentaci.
VŠB-TU Ostrava
150
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO Příklad definice znaku U+25B3 - WHITE UP-POINTING TRIANGLE (trime) △ U+2624 - CADUCEUS ☤ U+1F638 - GRINNING CAT FACE WITH SMILING EYES 😸 □ 21 bitový prostor Unicode je rozdělen do 17 rovin a každá rovina obsahuje 65 536 kódových pozic. To znamená, že každá rovina používá 16 bitový prostor, kde 216 = 65 536 a 17 * 65 536 = 1 114 112 kódových pozic. Každá rovina je charakterizována svým číslem a názvem, zkratkou a rozsahem, obr. 11-19.
U n i c o d e r o v i n y
B a s i c S u p p l e m e n t a r y
0000 - FFFF
Rovina 0
BMP
Basic Multilingual Plane
1 0000 – 1 FFFF
Rovina 1
SMP
Supplementary Multilingual Plane
2 0000 – 2 FFFF
Rovina 2
SIP
Supplementary Ideographic Plane
3 0000 – D FFFF
Rovina 3 – 13
-
E 0000 – E FFFF
Rovina 14
SSP
Supplementary Special-purpose Plane
F 0000 – 10 FFFF
Rovina 15 - 16
S PUA A/B
Supplementary Private Use Area
Unassigned
Obr. 11-19 Definice Unicode rovin Základní rovina - Basic plane 0, má zkratku a název BMP – Basic Multilingual Plane, [wiki_1109]. Tato rovina je důležitá a obsahuje skripty všech živých světových jazyků a ostatní grafické symboly. Prvních 256 pozic, 0 až 0x00FF odpovídá kódové stránce ISO 8859-1 a řídícím kódům C0 a C1. Z čehož plyne, že prvních 128 kódových pozic, 0 až 0x7F odpovídá ASCII 7 bitovému kódu. ASCII 7 bitový kód je podmnožinou ISO 8859-1. Zápis kódové pozice ve formátu UTF-8 má stejnou hodnotu jako ASCII 7 bitový kód. UTF-8 zajišťuje zpětnou kompatibilitu s ASCCI kódem. Zbývající kódové pozice v BMP obsahují skripty všech moderních světových jazyků. Potom BMP obsahuje skripty pro Cyriliku, arabské písmo, čínské, japonské a korejské tvary atd. To znamená, že většina světových dokumentů vystačí s BMP rovinou Basic Multilingual Plane. Supplementary plane 1 má jméno SMP - Supplementary Multilingual Plane, [wiki_1109]. Tato rovina obsahuje historické skripty, jako jsou egyptské hieroglyfy, jazyk Mayů a další. SMP rovina také obsahuje matematické alfanumerické symboly, dnešní a historické symboly pro hudbu, symboly pro hry, symboly hracích karet, Mahjong, domino atd.
VŠB-TU Ostrava
151
Basic Multilingual Plane □
Unicode začíná ASCII kódem □
11. Znaky a Unicode Supplementary plane 2 má jméno SIP - Supplementary Ideographic Plane, [wiki_1109]. Tato rovina obsahuje CJK ideogramy [wiki_1112], které nejsou zahrnuty v předchozích rovinách. Supplementary planes 3 to 13 jsou roviny, které jsou označovány jako nepoužité roviny. Supplementary plane 14 má jméno SSP - Supplementary Special-purpose Plane, [wiki_1109]. Tato rovina v současnosti obsahuje ne-grafické znaky. SSP rovina obsahuje blok tagů, které jsou pro staré jazyky používající tagy a používají se, když jazyk nemůže být indikován pomocí ostatních protokolů. Supplementary planes 15 a 16 mají jméno SPUA A/B - Supplementary Private Use Area A and B. Tyto roviny jsou určeny pro soukromé použití skupinami, které jsou mimo konsorcium ISO a Unicode.
11.10 Použití Unicode Pro použití v oblasti informatiky a hlavně v počítačích jsou definované formáty zápisu Unicode pozice. Tento nový zápis vychází ASCII kódování a zajišťuje pokrytí celého 21 bitového prostoru Unicode. Unicode definuje tři formáty zápisu, 8 bitový, 16 bitový a 32 bitový zápis. Názvy těchto formátů jsou UTF-8, UTF-16 a UTF 32.
11.11 UTF-32 Tento zápis používá 32 bitová slova. Unicode pozice mí maximálně 21 bitů. V UTF-32 je 21 □ bitová Unicode pozice doplněna nulovým prefixem do 32 bitů. Takto vytvořené číslo je zápis UTF-32 kódové pozice v UTF-32 formátu. Jinak, UTF-32 formát přímo odpovídá Unicode pozici, [wiki_1110]. Programovací jazyk Python od verze 3.2 používá UTF-32 jako jednotnou kódovací schéma, [wiki_1110].
11.12 UTF-16 UTF-16 je proměnlivou délku kódování z důvodu, aby pokryl celý 21 bitový prostor Unicode. UTF-16 □ UTF-16 používá 16 bitoví slova a Unicode pozici kóduje do jednoho neb= dvou slov, každé o 16 bitech, [wiki_1111]. V případě dvou slov, UTF-16 používá speciální dvojici, která se nazývá surrogate pár. Jedná se o aplikaci dvou hodnot z rozsahu 0xD800 až 0xDFFF. Tyto hodnoty leží v BMP rovině a k těmto hodnotám nejsou přiřazeny znaky. Tyto hodnoty jsou vyhrazeny pro aplikaci UTF-16 formátu. UTF-16 kódování má dva principy kódování v závislosti na hodnotě Unicode pozice. Unicode pozice z BMP roviny jsou přímo použity v UTF-16 formátu. Tyto pozice jsou kódovány jedním slovem. První Unicode rovina je základní a je dána rozsahem hodnot 0 až 0xFFFF, pouze 16 významových bitů je použito. V tomto případě není aplikována žádná transformace. Když Unicode pozice leží mimo základní rovinu, potom surrogate pár je použitý a kódová po□ zice je transformována do dvou slov. První slovo se nazývá vedoucí - lead a druhé koncové - Surrogate pár trail surrogates. Vedoucí surrogate je číslo z rozsahu 0xD800 až 0xDBFF. Koncový surrogate je potom číslo z rozsahu 0xDC00 až 0xDFFF. Algoritmus je, [wiki-0628]:
VŠB-TU Ostrava
152
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO
0x010000 je odečteno kódové pozice, tím vznikne číslo, které určitě má 20 významových bitů a je v rozsahu 0 to 0xFFFFF vzniklý rozdíl je rozdělen do dvou skupin, každá po 10 bitech, takto vzniknutá čísla jsou v rozsahu 0 až 0x3FF číslo odpovídající vyšším 10 bitům se přičte hodnota 0xD800. Potom součet je první Lead a trail surslovo UTF-16 formátu nebo vedoucí surrogate, který bude ležet v rozsahu 0xD800 až rogate □ 0xDBFF. (Previous versions of the Unicode Standard referred to these as high surrogates.) Číslo odpovídající nižším 10 bitů se přičte hodnota 0xDC00, Potom součet je druhé slovo UTF-16 formátu nebo trail surrogate, který bude ležet v rozsahu 0xDC00 až 0xDFFF. (Previous versions of the Unicode Standard referred to these as low surrogates.)
Lead\Trail D800 D801 D802 ⋮ DBFF
DC00 01 0000 01 0400 01 0800 ⋮ 10 FC00
DC01 01 0001 01 0401 01 0801 ⋮ 10 FC01
DC02 01 0002 01 0402 01 0802 ⋮ 10 FC02
… … … … ⋱ …
DFFF 01 03FF 01 07FF 01 0BFF ⋮ 10 FFFF
Obr. 11-20 UTF-16 kódování pomocí surrogate páru
𤨽
U+24A3D
HAN IDEOGRAM
0x02 4A3D -0x01 0000 0x01 4A3D
0001 0100 1010 0011 1101 Leading part 0x052
Trailing part 0x23D
UTF-16 – 0XD852 0XDE3D
Lead surrogate
0xD800 + 0x052 = 0xD852
Trail surrogate
0xDC00 + 0x23D = 0xDE3D
Obr. 11-21 Ukázka UTF-16 kódování Kódovací algoritmus je znázorněn na obr. 11-20. První surrogate sekvence 0xD800 a 0xDC00 odpovídá Unicode pozici 0x010000. Ukázková aplikace výše uvedeného algoritmu je na obr. 11-21:
První krok, odečtení hodnoty 0x010000 od kódové pozice. Výsledek má maximálně 20 bitů
VŠB-TU Ostrava
153
11. Znaky a Unicode
Druhý krok, rozdělení rozdílu na dvě skupiny po 10 bitech zprava. Rozdělení je vhodné provést v binárním zápisu rozdílu a výsledek zpětně transformovat do hexadecimálního tvaru. Vyšších 10 bitů přináleží k lead surrogate a nižší 10 bitů k trail surrogate Třetí krok, lead surrogate je dán součtem 0xD800 a vyšších 10 bitů Čtvrtý krok, trail surrogate je dán součtem 0xDC00 a nižších 10 bitů Nakonec, UTF-16 sekvence je lead and trail surrogate
11.13 UTF-8 UTF-8 formát je proměnlivé délky a tím dokáže pokrýt celý 21 bitový Unicode prostor. UTF-8 používá 8 bitové byty jako základní element, [wiki_1129]. UTF-8 zajištuje zpětnou kompatibilitu se 7 bitovým ASCII kódem a řeší i problém endianů ve spojitosti s UTF-16 and UTF-32. Počet použitých bytů závisí na hodnotě Unicode pozici. RFC 3629 z roku 2003 omezil maximální počet bytů mna 4 byty a tím i hodnoty v UTF-32 a UTF-16. UTF-8 formát, kde maximálním počet bytů je 4, dokáže pokrýt Unicode prostor 0 až 0x10FFFF. Tento prostor odpovídá 21 bitové n-tici a 17 Unicode rovinám. Základní vlastnosti UTF-8 formátu jsou, [wiki_1129]:
Existence zpětné kompatibility se 7 bitovým kódem ASCII v rozsahu 0 až 127. UTF-8 má stejné hodnoty jako ASCII kód. Nejvíce významový bit je roven nule. Jednoznačné rozlišení jednobytové sekvence od více bytové sekvence. Unicode pozice vyšší než 127 jsou kódovány více bytovou sekvenci, kde první byty je označován jako vedoucí - leading byte a další jako následující byty - continuation bytes. V sekvenci více bytů má vedoucí byte vždy prefix skládající se ze dvou nebo více jedniček následované jednou mulou. Následující byty má vždy prefix jednu jedničku následovanou nulou, '10'. Samo synchronizace, všechny aplikované byty jsou jednoznačně detekovatelné jednoznačným prefixem. U všech typů bytů je různý a tato definice umožňuje samo synchronizaci v případě, že dojde ke ztrátě libovolného počtu bytů, RFC 3629 Jednoznačná detekce délky sekvence. Počet vedoucích jedniček ve vedoucím bytů udává počet bytů v celé sekvenci. Kódová struktura. Mimo předem definované bity potom zbývající bity se odvozují od Unicode pozice.
Zpětná kompatibilita □
Jednoznačnost □
Self-synchronization □
UTF-8 sekvence bytů požívá leading a continuation byte, obr. 11-22. První byte je vedoucí byte - leading byte, který je následovaný jedním nebo více následujícími byty - continuation bytes. Všechny následující byty - continuation bytes jsou unikátně kódované prefixem 10B. Unikátní kód veVedoucí byte - leading byte je unikátně kódovaný následně: doucího bytu□
Prefixem 0B, který určuje, že sekvence má pouze jeden byte, vedoucí byte - leading byte. Prefixy 110B, 1110B a 11110B, u těchto prefixů počet jedniček udává počet bytů v celé sekvenci.
VŠB-TU Ostrava
154
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO
UTF-8 formát je samo synchronizující. Toto je důležitá vlastnost, když v sekvenci UTF8 bytů dojde ke ztrátě. Potom dekodér se dokáže opětně synchronizovat na vedoucí byte a tím zachránit zbývající znaky. Dojde k sice ke ztrátě jednoho či několika znaků, ale zbývající znaky po chybě jsou opět dekódovány správně. UTF-8 formát také obsahuje předem definované invalidní kódy. Každý znak musí být kódován nejkratší sekvenci.
Počet Leading byte, První kó- První kóvýznabinárně Řádek dová po- dová pomových zice zice Byte 1 bity
Continuation bytes, binárně Byte 2
Byte 3
1
7
U+0000
U+007F
0xxx xxxx
2
11
U+0080
U+07FF
110x xxxx
10xx xxxx
3
16
U+0800
U+FFFF
1110 xxxx
10xx xxxx
10xx xxxx
4
21
U+1 0000 U+1F FFFF
1111 0xxx
10xx xxxx
10xx xxxx
Byte 4
10xx xxxx
Source: http://en.wikipedia.org/wiki/UTF-8
Obr. 11-22 UTF-8 kódování
U+13051
EGYPTIAN HIEROGLYPH B002
0001 0011 0000 0101 0001
01 0011 000 Vedoucí část 1
00 0001
01 0001 část 4
část 3 část 2 Následující části
Operátor “+”znamená zřetězení
UTF-8 – 0XF0 XA3 0X81 0X91
Vedoucí byte “1111 0” + “000” = “1111 0000” => 0xF0
Následující byte 2 “10” + “01 0011” = “1010 0011” => 0xA3
Následující byte 3 “10” + “00 0001” = “1000 0001” => 0x81 Následující byte 4 “10” + “01 0001” = “1001 0001” => 0x91
Obr. 11-23 Ukázka UTF-8 kódování Ukázka UTF-8 kódování je na obr. 11-23. Tato ukázka je platná pouze pro Unicode pozice vyšší než 0x7F, mimo prostor ASCII kódu. Když Unicode pozice má maximálně 7 významových bitů, ASCII code corresponds to UTF-8□ potom UTF-8 přímo odpovídá této hodnotě. Pro Unicode pozice vyšší než 0x7F platí:
První krok, převeď Unicode pozici do binárního zápisu Druhý krok, rozděl binární řetězec do skupin po 6 bitech od LSB. Nejvyšší n-tici nemá 6 bitů. Nejvyšší n-tice přináleží do vedoucího bytu - leading byte a zbývající n-tice přináleží do následujících bytů - continuation bytes.
VŠB-TU Ostrava
155
11. Znaky a Unicode
Třetí krok, z tabulky vyber odpovídající řádek podle počtu následujících částí - continuation parts. Čtvrtý krok, vedoucí byte - leading byte vznikne zřetězením vedoucího prefixu s příslušnou vedoucí části. Počet vedoucích jedniček udává počet následujících bytů. Pátý krok se aplikuje na všechny následující části. Následující byte vznikne zřetězením prefixu 10B s příslušnou následující části.
11.14 Reference [Internet_1101]Glyph; http://whatis.techtarget.com/definition/glyph; on line 2013-12-04 [Interent_1102]Character; http://searchcio-midmarket.techtarget.com/definition/character; on line 2013-12-04 [Internet_1103]Unicode; http://searchcio-midmarket.techtarget.com/definition/Unicode; on line 2013-12-04 [Internet_1104]Coldewey D.: A quick PSA on "dots" versus "pixels" in LCDs; Jul 21, 2010; http://techcrunch.com/2010/07/21/a-quick-psa-on-dots-versus-pixels-inlcds/; on line 2013-12-12 [Internet_1105]Bigman A.: PPI vs. DPI: what’s the difference? in Design Tips and Resources, on February 26, 2013; http://99designs.com/designerblog/2013/02/26/ppi-vs-dpi-whats-the-difference/; on line 2013-12-12 [oracle_1101] 23.3 Specifying a Character Set in a JSP or XML File; http://docs.oracle.com/cd/E17904_01/bi.1111/b32121/pbr_nls003.htm; on line 2014-0831 [Unicode_1101] Character; http://www.unicode.org/glossary/#character; on line 2013-12-06 [Unicode_1102] 06
Glyph; http://www.unicode.org/glossary/#glyph; on line 2013-12-
[Unicode_1103] Unicode Technical Report #17; UNICODE CHARACTER ENCODING MODEL; http://www.unicode.org/reports/tr17/; on line 2013-12-06 [Unicode_1104] Character Encoding Form; http://www.unicode.org/glossary/#character_encoding_form; on line 2013-12-06 [Unicode_1105] Character Set; http://www.unicode.org/glossary/#character_set; on line 2013-12-06 [Unicode_1106]
Font; http://www.unicode.org/glossary/#font; on line 2013-12-06
[Unicode_1107] 06
Script; http://www.unicode.org/glossary/#script; on line 2013-12-
[Unicode_1108] C0 Controls and Basic Latin; http://www.unicode.org/charts/PDF/U0000.pdf; on line 2014-01-16 [wiki_1101]
Morse code; http://en.wikipedia.org/wiki/Morse_code; on line 2013-11-21
[wiki_1102]
Telex; http://en.wikipedia.org/wiki/Telex; on line 2013-11-21
[wiki_1103]
Character (computing); http://en.wikipedia.org/wiki/Character_(computing); on line 2013-12-06
VŠB-TU Ostrava
156
Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO [wiki_1104]
Character (symbol); http://en.wikipedia.org/wiki/Character_(symbol); on line 2013-12-06
[wiki_1105]
Glyph; http://whatis.techtarget.com/definition/glyph; on line 2013-12-06
[wiki_1106]
Character encoding; http://en.wikipedia.org/wiki/Character_encoding; on line 2013-12-06
[wiki_1107]
Computer font; http://en.wikipedia.org/wiki/Computer_font; on line 201312-06
[wiki_1108]
Typeface; http://en.wikipedia.org/wiki/Typeface; on line 2013-12-06
[wiki_1109]
Letterpress printing; http://en.wikipedia.org/wiki/Letterpress_printing; on line 2013-12-12
[wiki_1110]
Typewriter; http://en.wikipedia.org/wiki/Typewriter; on line 2013-12-12
[wiki_1111]
Pixel; http://en.wikipedia.org/wiki/Pixel; on line 2013-12-12
[wiki_1112]
ANSI escape code; http://en.wikipedia.org/wiki/ANSI_escape_code; on line 2013-12-27
[wiki_1113]
PostScript fonts; http://en.wikipedia.org/wiki/PostScript; on line 2013-1227
[wiki_1114]
TrueType; http://en.wikipedia.org/wiki/TrueType; on line 2013-12-27
[wiki_1115]
OpenType; http://en.wikipedia.org/wiki/OpenType; on line 2013-12-27
[wiki_1116]
Stroke (CJKV character); http://en.wikipedia.org/wiki/Stroke (CJKV character); on line 2013-12-27
[wiki_1117]
Ideogram; http://en.wikipedia.org/wiki/Ideogram; on line 2013-12-27
[wiki_1118]
ASCII; http://searchcio-midmarket.techtarget.com/definition/ASCII; on line 2013-12-27
[wiki_1119]
Code page 437; http://en.wikipedia.org/wiki/Code_page_437; on line 201401-21
[wiki_1120]
Code page 852; http://en.wikipedia.org/wiki/Code_page_852; on line 201401-21
[wiki_1121]
Windows-1252; http://en.wikipedia.org/wiki/Windows-1252; on line 201401-21
[wiki_1122]
Windows-1250; http://en.wikipedia.org/wiki/Windows-1250; on line 201401-21
[wiki_1123]
ISO/IEC 8859-1; http://en.wikipedia.org/wiki/8859-1; on line 2014-01-21
[wiki_1124]
ISO/IEC 8859-2; http://en.wikipedia.org/wiki/8859-2; on line 2014-01-21
[wiki_1125]
C0 and C1 control codes; http://en.wikipedia.org/wiki/C0_and_C1_control_codes; on line 20143-01-24
[wiki_1126]
Escape sequence; http://en.wikipedia.org/wiki/Escape_sequence; on line 2014-09-01
[wiki_1127]
UTF-32; http://en.wikipedia.org/wiki/UTF32; on line 2014-01-25
VŠB-TU Ostrava
157
11. Znaky a Unicode [wiki_1128]
UTF-16; http://en.wikipedia.org/wiki/UTF16; on line 2014-01-25
[wiki_1129]
UTF-8; http://en.wikipedia.org/wiki/UTF-8; on line 2014-01-25
[wiki_1130]
Byte order mark; http://en.wikipedia.org/wiki/Byte_order_mark; on line 2014-01-26
[wiki_1131]
Telegraphy; http://en.wikipedia.org/wiki/Telegrafy; on line 2014-01-27
[wiki_1132]
Baudot code; http://en.wikipedia.org/wiki/Baudot_code; on line 2014-0127
[wiki_1133]
Teleprinter; http://en.wikipedia.org/wiki/Teleprinter; on line 2014-01-27
[wiki_1135]
Character (computing)#Character_encoding; http://en.wikipedia.org/wiki/Character_(computing)#Character_encoding; on line 2014-0827
[wiki_1136]
Newline; http://en.wikipedia.org/wiki/Line_feed; on line 2014-08-27
[wiki_1137]
Esc key; http://en.wikipedia.org/wiki/Esc_key; online 2014-08-28
[wiki_1138]
Hayes command set; http://en.wikipedia.org/wiki/Hayes_command_set; on line 2014-08-28
[wiki_1139]
Code page; http://en.wikipedia.org/wiki/Code_pages; on line 2014-08-28
[wiki_1140]
Windows code page; http://en.wikipedia.org/wiki/Windows_code_page; on line 2014-08-28
[wiki_1141]
Whitespace character; http://en.wikipedia.org/wiki/Whitespace_character; on line 2014-08-31
[wiki_1142]
Character encodings in HTML; http://en.wikipedia.org/wiki/Character_encodings_in_HTML; on line 2014-08-31
[wiki_1143]
List of XML and HTML character entity references; http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references; on line 2014-08-31
[wiki_1144]
Alt code; http://en.wikipedia.org/wiki/Alt_code; on line 2014-08-31
[wiki_1145]
Kód Kamenických; http://cs.wikipedia.org/wiki/K%C3%B3d_Kamenick%C3%BDch; on line 2014-09-22
[wiki_1146]
Plane (Unicode); http://en.wikipedia.org/wiki/Plane_(Unicode)#Supplementary_Special-purpose_Plane; on line 2014-09-24
[wiki_1147]
ESC/P; http://en.wikipedia.org/wiki/ESC/P#Modern_printers; on line 201408-01
[Zdralek_2014] Jaroslav Zdralek, Zdenka Chmelikova: Introduction to Digital Systems for Joint Teaching Programme of BUT and VSB-TUO; VSB Ostrava 2014; ISBN 978-80-248-3646-1
VŠB-TU Ostrava
158