Čísla v plovoucí řádové čárce
Transkript
Čísla v plovoucí řádové čárce
Čísla v plovoucí řádové čárce INP 2008 FIT VUT v Brně Čísla v pevné vs plovoucí řádové čárce • Pevná řádová čárka – FX – bez desetinné části (8 bitů) • Přímý kód: 0 až 255 • Doplňkový kód: -128 až 127 • aj. 1 1 1 1 1 1 1 1 1 1 1 1 1 1 – s desetinnou částí (8 bitů) • Př. Přímý kód: 0 až 63,75 • aj. 1 1 – Čísla jsou na číselné osa rozložena rovnoměrně. • Plovoucí řádová čárka – FP – X = (-1)SM.BE • • • • M je mantisa, S je znaménko, B je základ, E je exponent E 1 1 M 1 1 1 1 1 1 – Čísla nejsou na číselné ose rozložena rovnoměrně, což umožňuje zvýšit přesnost (více bitů M) nebo rozsah (více bitů E) oproti FX. 2 Příklad FP na 14 bitech • E: 5 bitů, M: 8 bitů, S: 1 bit, B = 2 • Interpretace: y = (-1)S 0,M x 2E • Př. 1710 = 10001 x 20 = 1000,1 x 21 = 100,01 x 22 = 10,001 x 23 = 1,0001 x 24 = 0,10001 x 25 E S 0 0 0 M 1 0 1 1 0 0 0 1 0 0 0 • Př. 65536 = 216 = 0,1 x 217 – se na 14 bitů FX v přímém kódu nevejde, ale v FP to lze 0 1 0 0 0 1 1 0 0 0 0 0 0 0 3 Příklad FP na 14 bitech Problém 1: malá čísla nelze přesně zobrazit • Potřebujeme záporný exponent – Řešení 1: Přidat znaménkový bit k exponentu – nepoužívá se – Řešení 2: Posunout exponent – používá se, je potom jednodušší obvodová realizace porovnání čísel v FP • Skutečný_exponent = hodnota_pole_exponentu – BIAS – tj. exponent uložen v kódu s lichým nebo sudým posunutím • Použijeme BIAS = 16 (polovina 25) • Př. 1710 = 0,10001 x 25 (protože 16 + 5 = 21) 0 1 0 1 0 1 1 0 0 0 1 0 0 0 0 0 • Př. 0,2510 = 0,1 x 2-1 (15-16 = -1) 0 0 1 1 1 1 1 0 0 0 0 0 4 Příklad FP na 14 bitech Problém 2: zobrazení čísel není unikátní 0 1 0 1 0 1 1 0 0 0 1 0 0 0 0 1 0 1 1 0 0 1 0 0 0 1 0 0 • Př. 1710 = 0,10001 x 25 = 0,010001 x 26 • Unikátnost podpoříme zavedením normalizované mantisy – nejlevější bit musí být 1 • Explicitní jednička – v nejlevějším bitu vždy musí být 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 = 0,1 x 2-4 = 0,03125 • Implicitní jednička – protože víme, že v nejlevějším bitu mantisy musí být vždy jednička, není nutné ji v mantise reprezentovat, ale stále ji uvažujeme – výhoda: získáme jeden bit rozlišení navíc • Problém: Pokud se zavede normalizace, musí být nula ošetřena zvláštním způsobem 5 Příklad FP na 14 bitech Problém 3: chyby zobrazení • Rozsah zobrazení je -0,11111111 x 215 až + 0,11111111 x 215 . • Nejmenší kladné číslo (pokud neuvažujeme normalizaci): 0,00000001 x 2-16 • tj. například 2-39 nebo 2128 nelze zobrazit • Není ale možné ani dostatečně přesně zobrazit např. 128,5. • 128,510 = 10000000,1 je na 9 bitů, nejnižší bit se musí zanedbat nebo zaokrouhlit, vzniká chyba: (128,5-128)/128,5 ~ 0,39%. • Chyba se při použití výsledku v dalších operacích zvyšuje a zvyšuje. 6 IEEE 754 (1) • Standard IEEE 754 z roku 1985 definuje B = 2 a jednoduchou a dvojitou přesnost 24 a 53 bitů. Méně používaný standard IEEE 854 definuje B = 2 nebo 10. • Kromě definice B, M, E definuje standard další výjimečné situace. – Nečíselný výsledek, označený zkratkou NaN - Not a Number. Tento výsledek se ohlásí např. při výpočtu odmocniny z -1. – Definice nekonečna, které vznikne podílem 1/0. S tím souvisí definice aritmetiky na nekonečných hodnotách + - ∞, 1/ ∞, arctan(∞) = π /2, arccos (-1) = π. • Norma definuje čtyři přesnosti vyjádření: – – – – Jednoduchá přesnost 24 bitů Jednoduchá rozšířená přesnost ≥ 32 bitů Dvojitá přesnost 53 bitů Dvojitá rozšířená přesnost ≥ 64 bitů 7 IEEE 754 (2) Číslo N se získá z hodnoty E uvedené v poli exponentu a z hodnoty z pole mantisy (zlomková část ) podle vzorce N = (-1)S (2E-BIAS) (F0,F1 ...F23, nebo F52, nebo F63), kde BIAS = 127, 1023, nebo 16 383 pořadě. Mantisa je vyjádřena přímým kódem se znaménkem, exponent kódem s lichým posunutím. Je důležité si uvědomit, že v poli exponentu je uvedeno číslo zvětšené o hodnotu BIAS. Rozlišujeme tedy pojmy pole exponentu, což je posunutý exponent, a exponent, resp. neposunutý exponent. Zlomková část f udává číslo menší než 1. Mantisu však získáme součtem 1 + f, což můžeme zapsat 1,f. 8 IEEE 754 (3): Příklad Příklad. Jaké číslo je zaznamenáno na 32 bitech v jednoduché přesnosti? 1 1000 0001 0100 0000 0000 0000 0000 000 v poli exponentu je číslo 129 exponent je tedy 129 - 127 = 2 zlomková část f = ,012 = ,25 mantisa je tedy 1,25 Jde tedy o číslo -1,25 . 22 = -5 9 IEEE 754 (4) – výjimečné hodnoty v „single precision“ U formátu s jednoduchou přesností si vysvětlíme vyjadřování speciálních hodnot. Povolené hodnoty exponentu čísel leží v intervalu <-126, +127>, po posunu +127 získáme povolené hodnoty v poli exponentu <1, 254>. Je-li tedy v poli exponentu 0, nebo 255, jde o hodnoty vyhrazené pro speciální účely: Subnormalizované (denormalizované) číslo: nepočítá se se skrytou 1 a exponent je chápán jako -126. 10 IEEE 754 (5): Příklady X Reprezentace X v IEEE 754 – single precision 1,0 0 01111111 00000000000000000000000 2,0 0 10000000 00000000000000000000000 19,5 0 10000011 00111000000000000000000 -3,75 1 10000000 11100000000000000000000 0 (spec.) 0 00000000 00000000000000000000000 +/- nekonečno 0/1 11111111 00000000000000000000000 NaN 0/1 11111111 cokoliv nenulového Denormalizované číslo 0/1 00000000 cokoliv nenulového 11 IEEE 754 (6) – rozsah „single precision“ • MAX = 2127 x 1,11111111111111111111111 – je to normalizované číslo ~3,4x1038 • MIN = 2-126 x 0,00000000000000000000001 – je to denormalizované číslo ~1,4x10-45 • Čtyři intervaly nelze reprezentovat – – – – Záporná čísla menší než –MAX (negative overflow) Záporná čísla větší než –MIN (negative underflow) Kladná čísla menší +MIN (positive underflow) Kladná čísla větší než +MAX (positive overflow) 12 IEEE 754 (7): Zaokrouhlování • K zaokrouhlování dochází v případě, že dané číslo nelze přesně vyjádřit. Např. při násobení v desítkové soustavě máme výsledek operace 2,1 x 0,5 = 1,05 zaokrouhlit na 2 významové číslice. Je věcí konvence, zda za výsledek prohlásíme 1,1, nebo 1,0. Oba výsledky jsou zatíženy stejně velkou chybou. • Norma IEEE zaokrouhluje na číslo, jehož nejnižší číslice je sudá (ve dvojkové soustavě). Zaokrouhlovací procedura je definovaná pro 4 případy: – – – – Zaokrouhlení k nejbližšímu číslu Zaokrouhlení k nule Zaokrouhlení k +∞ Zaokrouhlení k -∞ 13 Absolutní chyba zobrazení 14 Příklad výpočtu max. absolutní chyby zobrazení Pro základ B = 2 a pětibitovou normalizovanou mantisu M < 1 určíme pro několik hodnot exponentu maximální absolutní chybu zobrazení. 15 Přesnost čísel FP • Čísla s pohyblivou řádovou čárkou mají různou velikost intervalů pro každou konkrétní hodnotu exponentu (obrázek), přičemž pro každý interval je odlišná množina bodů s konstantním rozestupem (bodů je stejný počet). Rozestup mezi reprezentovatelnými body a velikost největší chyby pro jistý exponent je základ-krát větší než chyba v předchozím intervalu. • Vidíme, že není pravda, že čísla FP jsou "přesnější", než čísla s pevnou řádovou čárkou. Je-li počet bitů pro číslo FX a počet bitů pro číslo FP stejný, může být representace některých čísel FX přesnější, než jejich vyjádření ve FP, protože u FP je pro mantisu určena jen část z celkového počtu bitů a druhá část je určena pro exponent. 16 Aritmetické operace - FP 17 Problémy při sčítání čísel FP - asociativita FP sčítání není asociativní, tedy platí x + (y + z) není vždy rovno (x + y) + z Příklad: klad: Máme tři čísla x = -1,5.1038, y = 1,5.1038, z = 1,0. Pak x + (y + z) = -1,5.1038 + (1,5.1038 + 1,0) = = -1,5.1038 + 1,5.1038 = 0 Naopak (x + y) + z = (-1,5.1038 + 1,5.1038) + 1,0 = = 0,0 + 1,0 = 1,0 Důvodem tohoto chování je omezená přesnost vyjádření na daném počtu bitů a aproximace skutečných hodnot přibližnými. 18 Problémy při sčítání čísel FP – zaokrouhlování Uvažme sčítání s 5ti významovými číslicemi v HW (pro jednoduchost v desítkové soustavě) 4,5674 +0,00025001 4,56765001 .100 zaokrouhlíme na 4,5677 Nestačí při výpočtu přidat další jednu nebo dvě významové pozice, musí se zapamatovat i jednička na konci čísla, která rozhodne o směru zaokrouhlení. Ve dvojkové soustavě se zapamatuje takovýto nenulový bit při posuvu vpravo v záchytném klopném obvodu s (sticky bit). 19