Počítačové systémy Zobrazení čísel v počítači Miroslav Flídr Počítačové systémy LS 2007-1/21- Západočeská univerzita v Plzni
Vážený poziční kód Obecný předpis čísla vyjádřeného v pozičním systému: C = n 1 i= l w i b i b představuje základ zvoleného pozičního systému váha w i může nabývat pouze určitých hodnot (0... b 1) Z hlediska výpočetní techniky jsou zajímavé poziční systémy o základu 2, 8, 16 označované jako binární, oktalové a hexadecimální. Příklad: 1823, 56 10 = 1 10 3 + 8 10 2 + 2 10 1 + 3 10 0 + 5 10 1 + 6 10 2 1010, 101 2 = 1 2 3 + 0 2 2 + 1 2 1 + 0 2 0 + 1 2 1 + 0 2 2 + 1 2 3 Miroslav Flídr Počítačové systémy LS 2007-2/21- Západočeská univerzita v Plzni
Celá čísla s pevnou řádovou čárkou a znaménkem Čísla jsou zobrazena pomocí váženého pozičního systému, kde l = 0 a řádová čárka je za poslední platnou číslicí. Je třeba rozlišit kladná a záporná čísla nejvíce významný bit představuje znaménko. Je možné uvažovat pouze kladná čísla. Např. pro 8mi bitová čísla je možné zobrazit 2 8 = 256 čísel. Existuje několik druhů kódování celých čísel přímý kód inverzní kód dvojkový doplněk excess 2 n 1 1 Miroslav Flídr Počítačové systémy LS 2007-3/21- Západočeská univerzita v Plzni
Přímý kód (Signed magnitude) Představuje nejjednodušší způsob reprezentace celých čísel. nejvíce významný bit představuje znaménko zbylé bity představují velikost n-bitové celé číslo umožní zobrazit čísla v rozsahu (2 n 1 1) 2 n 1 1 Příklad: +31 10 = 0 0011111 2 31 10 = 1 0011111 2 Nevýhody přímého kódu Poskytuje dvě reprezentace pro nulu (00000000 a 10000000). Nešikovné pro hardwarovou implementaci (složitá operace sčítání) Miroslav Flídr Počítačové systémy LS 2007-4/21- Západočeská univerzita v Plzni
Dvojkový doplněk Nejčastěji používaný způsob kódování. kladná čísla jsou stejná jako v přímém kódu záporná čísla získáme invertováním kladného a přičtením jedničky Příklad: 72 10 : 01001000 2 inverze : 10110111 2 +1 : 00000001 2 72 10 : 10111000 2 Vlastnosti dvojkového doplňku pouze jedna reprezentace pro nulu asymetrický rozsah čísel: 2 n 1 2 n 1 1 jednoduchá implementace sčítaní a odčítání Miroslav Flídr Počítačové systémy LS 2007-5/21- Západočeská univerzita v Plzni
Posunuté kódování (excess-n) dvojkový doplněk se posouvá přičtením hodnoty N = 2 n 1 1 zachovává význam znaménkového bitu (1 - kladné, 0 - záporné) usnadňuje porovnávnání/třídění čísel pouze jedna reprezentace pro nulu (01111111 2 ) Příklad: excess 127 +72 10 : 11000111 2 72 10 : 00010111 2 Miroslav Flídr Počítačové systémy LS 2007-6/21- Západočeská univerzita v Plzni
Reálná čísla Čísla v pevné řádové čárce používá se pouze pro speciální účely (finanční software) vhodné pro čísla se známou pevným formátem (např. měna) zobrazeny jako přeškálovaná celá čísla Čísla v pohyblivé řádové čárce (floating-point čísla) používá se takzvaná vědecká notace R = s m b e Hodnota dána znaménkem s, mantisou m a exponentem e při bázi číselného systému b. floating point čísla jsou pouhou aproximací reálných čísel dokáže zobrazit pouze konečný počet čísel častá nepřesnost zobrazení (např. není možné zobrazit číslo 1/10) Miroslav Flídr Počítačové systémy LS 2007-7/21- Západočeská univerzita v Plzni
Floating-point čísla dříve různé konvence reprezentace floating-point čísel různé volby kódování mantisy a exponentu odlišný tvar mantisy (např. čistá desetinná část) rozdílné zobrazení tzv. normalizovaných čísel mnoho reprezentací vedlo k nekorektním aritmetickým operacím zavedena norma IEEE 754-1985 Co specifikuje standard IEEE 754 formát reprezentace precizní specifikace výsledků operací speciální hodnoty předepsané chování při neplatných operacích Miroslav Flídr Počítačové systémy LS 2007-8/21- Západočeská univerzita v Plzni
Standard IEEE 754 Tři základní přesnosti zobrazení single-precision (32 bitové) double-precision (64 bitové) extended precision (80 bitové) používá se jen jako interní formát Hodnota čísla zobrazeného dle standardu IEEE 754 F = ( 1) sign (1 + fraction) 2 exponent Miroslav Flídr Počítačové systémy LS 2007-9/21- Západočeská univerzita v Plzni
Zobrazení čísla dle standardu IEEE 754 Exponent posunuté kódování snadné třídění rozsah exponentů 2 126 2 127 resp. 2 1022 2 1023 Mantisa tzv. signifikant je dán jako hodnota (1 + fraction) uvažuje se implicitní 1 vlevo od řádové čárky mantisa obsahuje pouze fraction (je normalizovaná) mantisa reprezentuje čísla 1 < m < 2 Příklad dekadické 0.75 = 3/4 = 3/2 2 binární 0.11 = 1.1 2 1 IEEE 754 1 11111110 10000000000000000000000 Miroslav Flídr Počítačové systémy LS 2007-10/21- Západočeská univerzita v Plzni
Zobrazení čísla dle standardu IEEE 754 Typy čísel dle IEEE 754 normalizované ± 0 < ex ponent < max libovolný bitový vzor denormalizované ± 000 0 libovolný nenulový vzor nula ± 000 0 000 0 Inf ± 111 1 000 0 NaN ± 111 1 libovolný nenulový vzor Nástroje pro ošetření chyb ošetření podtečení rozšíření o denormalizovaná čísla ošetření přetečení zavedeno číslo Inf obsahuje dvě nuly mohou pomoci s určením znaménka přetečení nezobrazitelné/neexistující číslo Miroslav Flídr Počítačové systémy LS 2007-11/21- Západočeská univerzita v Plzni
Ošetření singulárních případů ve standardu IEEE 754 Ošetření podtečení doplnění o denormalizovaná čísla (bohužel nepovinné) nejmenší normalizované číslo 0 00000001 00000000000000000000000 = 1.0 2 126 1.5 10 8 největší a nejmenší denormalizované číslo 0 00000000 11111111111111111111111 0.9 9 2 127 1.5 10 8 0 00000000 00000000000000000000001 = 2 23 2 127 7 10 46 přijatelnější než rovnou zaokrouhlit k nule uvažována implicitní nula před desetinnou tečkou Miroslav Flídr Počítačové systémy LS 2007-12/21- Západočeská univerzita v Plzni
Ošetření singulárních případů ve standardu IEEE 754 Ošetření přetečení speciální reprezentace pro nekonečno dvě nekonečna lišící se znaménkem 0 11111111 00000000000000000000000 = +Inf 1 11111111 00000000000000000000000 = Inf uvažována implicitní nula před desetinnou tečkou Inf je možné použít v matematických operacích Inf + Inf = Inf Inf + C = Inf Inf - C = Inf C / 0.0 = Inf -C / 0.0 = -Inf C / Inf = 0.0 Miroslav Flídr Počítačové systémy LS 2007-13/21- Západočeská univerzita v Plzni
Ošetření singulárních případů ve standardu IEEE 754 Nula zobrazení jako u denormalizovaných čísel 00000000000000000000000000000000 = +0.0 10000000000000000000000000000000 = 0.0 +0.0 a -0.0 jsou si rovny určení znaménka přetečení C / Inf = 0.0 C / -Inf = -0.0 1 / +0.0 = Inf 1 / -0.0 = -Inf Miroslav Flídr Počítačové systémy LS 2007-14/21- Západočeská univerzita v Plzni
Ošetření singulárních případů ve standardu IEEE 754 NaN (Not a Number) jakmile se během výpočtu vyskytne zůstane zachováno NaN není rovno žádnému číslu (ani sobě) NaN není ani větší ani menší než jakékoli číslo NaN reprezentuje výsledek všech operací, které vedou na exponent 11 1 a libovolnou nenulovou mantisu Inf / Inf = NaN 0.0 / 0.0 = NaN sqrt( -3 ) = NaN arccos( 2.4 ) = NaN log(-5) = NaN Miroslav Flídr Počítačové systémy LS 2007-15/21- Západočeská univerzita v Plzni
Celočíselná aritmetika Aritmetika s čísly v přímém kódu sčítaní při stejném znaménku sčítanců: sečtou se hodnoty čísel a zachová se znaménko k přetečení dojde jestliže součet hodnot je větší než 2 (n 1) 1 sčítaní při různých znaménkách sčítanců: nalezne se číslo s větší absolutní hodnotou a odečte se od něj menší číslo přetečení není možné násobení a dělení jednoduché: provede se operace pouze s hodnotami a znaménko se určí jako XOR původních znamének Příklad: 64 10 + 1 10 ( 1 1000000 2 + 0 0000001 2 ) 64 10 : 1 1000000 2 1 10 : 1 0000001 2 63 10 : 1 0111111 2 Miroslav Flídr Počítačové systémy LS 2007-16/21- Západočeská univerzita v Plzni
Celočíselná aritmetika Aritmetika s čísly v doplňkovém kódu sčítaní po bitech přenos z nejvíce významného bitu je zahozen při různých znaménkách nemůže dojít k přetečení jestliže se liší přenos do a ze znaménkového bitu došlo k přetečení liší-li se znaménko sčítanců a výsledku, tak došlo k přetečení odčítaní je provedeno přičtením negovaného čísla (převrácená hodnota všech bitů + 1) není potřeba extra HW pro násobení a dělení se čísla převedou na kladná a po provedení operace se vyhodnotí znaménko Příklad: 64 10 1 10 ( 1 1000000 2 0 0000001 2 ) 64 10 : 1 1000000 2 +( 1 10 ) : 1 1111111 2 63 10 : 0 0111111 2 Miroslav Flídr Počítačové systémy LS 2007-17/21- Západočeská univerzita v Plzni
Aritmetika s floating-point čísly Pro realizaci operací s floating point čísly není nutná speciální implementace v HW (postačí sčítání a posun). To umožňuje práci s těmito čísly i na levnějších systémech používaných např. ve vestavných systémech. Operace sčítání a odečítání s čísly v IEEE 754 formátu 1 opětné vložení implicitního bitu (jedničky resp. nuly u denormalizovaných čísel) 2 denormalizace - je nutné srovnat exponenty 3 vlastní operace sčítání/odečítání 4 opětovná normalizace 5 příprava před uložením ošetření vysunutých bitů - použití guard bitů zaokrouhlení (k nule, k nejbližšímu, k plus nekonečnu, k mínus nekonečnu) odstranění implicitního bitu Miroslav Flídr Počítačové systémy LS 2007-18/21- Západočeská univerzita v Plzni
Aritmetika s floating-point čísly Příklad sčítání (s použitím mini floating-point čísel) Denormalizace: Srovnání exponentů a sečtení: Normalizace: 3.25 10 : 0 0001 101 2 +0.125 10 : +0 1101 000 2 3.25 10 : 0 0001 (1.)101(00) 2 +0.125 10 : +0 1101 (1.)000(00) 2 3.25 10 : 0 0001 (1.)101(00) 2 +0.125 10 : 0 0001 (0.)000(10) 2 3.375 10 : 0 0001 (1.)101(10) 2 3.375 10 = 0 0001 101 2 (3.25 10 ) Miroslav Flídr Počítačové systémy LS 2007-19/21- Západočeská univerzita v Plzni
Aritmetika s floating-point čísly Operace násobení 1 opětné vložení implicitního bitu 2 pronásobení mantis 3 sečtení exponentů 4 provést normalizaci posunem doprava a zvýšit exponent o počet posunů 5 uložení výsledku bez implicitního bitu po zaokrouhlení Operace dělení 1 opětné vložení implicitního bitu 2 podělení mantis 3 odečtení exponentů 4 provést normalizaci posunem doleva a snížit exponent o počet posunů 5 uložení výsledku bez implicitního bitu po zaokrouhlení Miroslav Flídr Počítačové systémy LS 2007-20/21- Západočeská univerzita v Plzni
"Give a digital computer a problem in arithmetic, and it will grind away methodically, tirelessly, at gigahertz speed, until ultimately it produces the wrong answer" Brian Hayes, A Lucid interval, 2003 Problémy s aritmetikou s pevnou přesností zobrazená čísla mají omezenou přesnost a velikost (chyby zaokrouhlování, přetečení, podtečení) nepokrývají úplnou množinu celých resp. reálných čísel vzhledem k aritmetických operacích nejsou uzavřenými množinami neplatí obecně asociativita operací V jakých úlohách automatického řízení se projeví problémy? řešení obyčejných lineárních rovnic vyšetřování řiditelnosti a pozorovatelnosti výpočty frekvenční odezvy výpočty Lyapunovy, Sylvestrovy a Riccatiho rovnice Miroslav Flídr Počítačové systémy LS 2007-21/21- Západočeská univerzita v Plzni