Čí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