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

Transkript

Číslicové systémy I pro integrovanou výuku VUT a VŠB-TUO
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]
&quot;
!
“
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
&amp;
&apos;
&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
&lt;
&gt;
>
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

Podobné dokumenty