MI-AAK (Aritmetika a kódy)
Pohyblivá řádová čárka c doc. Ing. Alois Pluháček, CSc., 2011
Katedra číslicového návrhu Fakulta informačních technologií České vysoké učení technické v Praze
Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti
A5. pohyblivá řádová čárka definice základní operace normalizovaný tvar přeplnění a nenaplnění zaokrouhlování – čísel bez znaménka – na nejbližší hodnotu – čísel se znaménkem • zobrazení mezivýsledků (bity G, R a S) • skrytá jednička • IEEE Std 754-2008 • • • • •
MI-AAK
c A. Pluháček 2011
pohyblivá řádová čárka — definice pohyblivá řádová čárka
[floating-point]
A ∼ (M , E)
=⇒
A = M · zE
M — mantisa [significand, mantissa] řádová čárka zpravidla mezi 1. a 2. číslicí mantisy, popř. mezi 1. a 2. číslicí její absolutní hodnoty E — exponent nebo charakteristika [exponent, characteristic] vždy celé číslo (proč ?) z — základ (báze) použité soustavy z = 2 nebo z = 2 i anebo z = 10 mantisa i exponent — nějaký kód (přímý, doplňkový, . . . ) kódy mohou být stejné anebo různé uvědomíme si: znaménko A = znaménko M pohyblivá řádová čárka ∼ tzv. semilogaritmický tvar čísla např. 1,23 · 104 MI-AAK
A5 – 1
c A. Pluháček 2011
základní operace ⊙ F(X)
operace (sčítání, odčítání, násobení nebo dělení) obraz čísla X v pohyblivé řádové čárce A⊙B →C w w
F(A) → (MA , EA ) F(B) → (MB , EB ) ↓ (MA , EA ) ⊙ (MB , EB ) → (MC , EC ) ↓ (MC , EC ) → F(C)
MI-AAK
A5 – 2
c A. Pluháček 2011
základní operace
násobení:
ii
MA ·z EA · MB ·z EB = MA ·MB · z EA +EB
(MA , EA ) · (MB , EB ) → (MA · MB , EA +EB ) dělení:
(MA ·z EA ) / (MB ·z EB ) = MA /MB · z EA −EB
(MA , EA ) / (MB , EB ) → (MA / MB , EA −EB ) sčítání a odčítání:
(MA ·z E ) ± (MB ·z E ) = MA ±MB · z E
(MA , EA ) ± (MB , EB ) → ′ ′ →(MA , E) ± (MB , E) → ′ ′ , E) ± MB →(MA
MI-AAK
A5 – 3
c A. Pluháček 2011
normalizovaný tvar
!
Algoritmy operací je třeba upravit tak, aby se neztrácela přesnost, pokud to není nezbytně nutné!
!
zjednodušení algoritmů ➠ normalizovaný tvar
normalizovaný tvar — mantisu již nelze
posunout doleva ☛ bude dále předpokládán !!!
Výsledek každé operace nutno normalizovat !
normalizovaný tvar nuly: MI-AAK
A5 – 4
mantisa = 0 exponent nejmenší možný c A. Pluháček 2011
základní operace
ii
předpoklad: normalizovaný tvar sčítání: EA ≥ EB ⇒ E = EA ′ = MA MA ′ = MB ⊲ (EA −EB ) MB EA < EB ⇒ E = EB ′ = MA ⊲ (EB −EA ) MA ′ = MB MB odečítání: analogicky násobení: MA ∈ h1, 2), MB ∈ h1, 2) ⇒ MA ·MB ∈ h1, 4)
dělení: MA ∈ h1, 2), MB ∈ h1, 2) ⇒ MA /MB ∈ h 21 , 2) porovnávání: EA > EB ⇐⇒ |A| > |B| MI-AAK
A5 – 5
c A. Pluháček 2011
přeplnění a nenaplnění problém přeplnění dílčí operace: • V některých případech lze přeplnění dílčí operace (zejm. operace s mantisami) předejít úpravou (posuvem) jedné z mantis nebo rozšířením řádové mřížky. • Jindy lze přeplnění dílčí operace dodatečně eliminovat – náležitě upravit. • Úpravy je třeba náležitě kompenzovat změnou příslušného exponentu. výsledek nelze kompenzovat ani jinak vhodně upravit (a tedy ani zapsat do dané řádové mřížky): • přeplnění (přetečení) [overflow] — příliš velký exponent — příliš velká absolutní hodnota výsledku • nenaplnění (podtečení) [underflow] — exponent záporný s příliš velkou absolutní hodnotou — výsledek se blíží k nule (ale není to nula) MI-AAK
A5 – 6
c A. Pluháček 2011
zaokrouhlování čísel bez znaménka (nezáporných čísel) zaokrouhlování dolů: A → ⌊A⌋−m . . . oříznutí na m míst za čárkou ⌊A⌋−m ≤ A < ⌊A⌋−m + ε, kde ⌊A⌋−m je celistvý násobek ε (jednotky ř. m.) př.: ε = 0,001 3,141 925 3,141 025
. = 3,141 . = 3,141
= ⌊3, 141 925⌋−3 = ⌊3, 141 025⌋−3
zaokrouhlování nahoru: A → ⌈A⌉−m ⌈A − ε⌉−m < A ≤ ⌈A⌉−m , kde ⌈A⌉−m je celistvý násobek ε (jednotky ř. m.) př.: ε = 0,001 3,141 925 3,141 025 MI-AAK
. = 3,142 . = 3,142
= ⌈3, 141 925⌉−3 = ⌈3, 141 025⌉−3
A5 – 7
c A. Pluháček 2011
zaokrouhlování na nejbližší hodnotu zaokrouhlování na nejbližší hodnotu: ( ⌊A⌋−m , je-li A ≤ ⌊A⌋−m + ε/2 A→ ⌈A⌉−m , je-li A ≥ ⌊A⌋−m + ε/2 . př.: 3,141 925 = 3,142 . 3,141 025 = 3,141 Pod pojmem zaokrouhlování (bez přívlastku „dolůÿ či „nahoruÿ) se obvykle rozumí zaokrouhlování na nejbližší hodnotu. Co, když je A = ⌊A⌋−m + ε/2 ? 3,142 . př.: 3,142 500 = ? 3,143 MI-AAK
A5 – 8
c A. Pluháček 2011
zaokrouhlování na nejbližší hodnotu
ii
zaokrouhlování s preferencí většího čísla: ⌊A⌋−m , je-li A ≤ ⌊A⌋−m + ε/2 A→ ⌈A⌉−m , je-li A > ⌊A⌋−m + ε/2 pak:
A → ⌊A + ε/2⌋−m . př.: 3,141 500 = 3,142 = ⌊3, 141 500 + 0, 000 500⌋−3 . 3,142 500 = 3,143 = ⌊3, 142 500 + 0, 000 500⌋−3 zaokrouhlování s preferencí sudé číslice: ⌊A⌋−m , je-li A < ⌊A⌋−m + ε/2 ⌊A⌋ −m , je-li A = ⌊A⌋−m + ε/2 a platí (*) A→ ⌈A⌉−m , je-li A = ⌊A⌋−m + ε/2 a platí (*) ⌈A⌉−m , je-li A > ⌊A⌋−m + ε/2 (*) . . . po tomto zaokrouhlení bude poslední číslice sudá . př.: 3,141 500 = 3,142 . 3,142 500 = 3,142 MI-AAK
A5 – 9
c A. Pluháček 2011
zaokrouhlování čísel se znaménkem aplikace, kombinace a modifikace předchozích způsobů: zaokrouhlování s preferencí většího čísla (na nejbližší hodnotu) s preferencí sudé číslice
zaokrouhlování: • směrem k −∞ • směrem k +∞ • směrem k nule • směrem od nuly
MI-AAK
A5 – 10
c A. Pluháček 2011
zobrazení mezivýsledků (bity G, R a S)
X . . . správný mezivýsledek (může mít až ∞ míst) Y . . . dále použitá část mezivýsledku, a to s případným použitím bitů: G [Guard] R [Round] S [Sticky] Bity G, R a S se (podle okolnosti) použijí • v další dílčí operaci nebo • pro úpravu výsledku (normalizace a zaokrouhlení). MI-AAK
A5 – 11
c A. Pluháček 2011
skrytá jednička předpoklady: • Obrazy čísel jsou normalizované. • Mantisa M je v přímém kódu. důsledky: • ∀M 6= 0
MSB(|M |) = 1
• Bit, který je vždy roven 1, je zbytečné zapisovat a ze zápisu se vypustí.
skrytá jednička
problém: M = 0 řešení: nulu zobrazit jinak (použít jinou reprezentaci) — viz dále (A5 – 15)
MI-AAK
A5 – 12
c A. Pluháček 2011
IEEE Std 754-2008 princip skryté jedničky — příklad dvojkový formát 32 bitů 8b 24 b E+127 ± |M | ? 6 dvojková čárka (pro M i pro E) ⇓ 8b 23 b S7 G T 0 -1 -23 6dvojková čárka pro G i T Příklad: −5,510 ∼ ? 5,510 = 101,12 = (1,011 ⊳ 10)2 T = 0,011 000 . . . 0002 G = (127 + 2)10 = 1000 00012 obraz čísla −5,510 : 1 1000 0001 011 000. . . 0002 = = 1100 0000 1011 0000 . . . 00002 = = C0B0 000016 MI-AAK
A5 – 13
c A. Pluháček 2011
IEEE Std 754-2008
ii
dvojkové formáty
uspořádání řádové mřížky jako u formátu 32 bitů standardně: mantisa — přímý kód exponent — aditivní kód typu 1
g počet bitů v části G počet bitů v části T t K = 2 g−1 −1 základní formáty: 32 bitů, 64 bitů, 128 bitů další formáty: 16 bitů, k bitů, kde k = 32·i ≥ 128, a jiné formát 16 bitů 32 bitů 64 bitů 128 bitů MI-AAK
g 5 8 11 15
t 10 23 52 112
přesnost 11 b 24 b 53 b 113 b
A5 – 14
K = Emax 15 127 1 023 16 383
c A. Pluháček 2011
IEEE Std 754-2008
A F(A)
iii
zobrazené číslo obraz čísla A
nula a jiné „zvláštnostiÿ A G = 0. . . 02 (−1)S · T · 2 −K +1 G = 1. . . 12 a T = 0 (−1)S · ∞ G = 1. . . 12 a T 6= 0 NaN jinak (viz A5 – 13 ) (−1)S · (1 + T ) · 2 G−K 000. . . 000 F(A) = ⇒ A = ±0 100. . . 000 ±∞
přeplnění — „limitaÿ
NaN [ Not a Number ]
MI-AAK
(např. 5/0 = +∞)
výsledek nelze určit (ani pomocí ∞) (např. 0/0 = NaN) A5 – 15
c A. Pluháček 2011
IEEE Std 754-2008
iv
desítkové formáty • •
• •
— A = M · 10E Exponent E je zapsán dvojkově. Mantisa M může být zapsána – dvojkově nebo – desítkově (s použitím komprese). Obraz čísla nemusí být normalizován. Řádové mřížky je rozdělena části S, G a T obdobně jako u dvojkových formátů, ale převod částí G a T na E a |M | je značně komplikovaný
základní formáty: 64 bitů, 128 bitů další formáty: 32 bitů, k bitů, kde k = 32·i ≥ 128, a jiné formát 32 bitů 64 bitů 128 bitů MI-AAK
g 11 13 17
t 20 50 110
přesnost 24 b / 7 číslic 54 b / 16 číslic 114 b / 34 číslic
A5 – 16
Emax 96 384 6 144 c A. Pluháček 2011