Y36SAP - aritmetika Čísla se znaménkem a aritmetické operace pevná a pohyblivá řádová čárka
Kubátová 2007
Y36SAP-aritmetika
1
Osnova • Zobrazení záporných čísel – Přímý, aditivní a doplňkový kód a operace sčítání a odčítání, přetečení
• Čísla s pohyblivou řádovou čárkou – Zobrazení v řádové mřížce – Provádění základních aritmetických operací – Normalizovaný tvar, skrytá jednička Kubátová 2007
Y36SAP-aritmetika
2
1
Řádová mřížka (opakování) • Zobrazení čísel na počítači je limitováno (rozsahem registrů, paměť. míst, apod.) • Řádová mřížka určuje formát zobrazitelných čísel (tj. definuje nejvyšší řád n a nejnižší řád m) • Příklad řádových mřížek řádová čárka
n = 3,
-m = 0
Kubátová 2007
n = 0,
-m = -3
Y36SAP-aritmetika
3
Aritmetické operace v ř.m. - chyby • Někdy se lze chybám vyhnout změnou délky ř.m. – rozšiřování × zkracování ř.m. Př.
rozšiř.
1 5 5 0
0 1 5 5 0 0 0 zkrac.
• Při ztrátě přesnosti můžeme velikost chyby ovlivnit způsobem zaokrouhlení – zaokrouhlení nahoru/dolů – zaokrouhlení s pref. sudé číslice – zaokrouhlení s pref. většího čísla Kubátová 2007
Y36SAP-aritmetika
4
2
Aritmetické operace v ř.m. (3) • Zaokrouhlení dolů (oříznutí) 0 1 2 5
≈
0 1 2
• Zaokrouhlení nahoru 0 1 2 5 +
≈
0 1 3
0 0 1 0 1 3 5
Kubátová 2007
Y36SAP-aritmetika
5
Aritmetické operace v ř.m. • Zaokrouhlení s preferencí sudé číslice 0 1 2 4
≈
0 1 2
0 1 2 5
≈
0 1 2
0 1 2 6
≈
0 1 3
• Zaokrouhlení s preferencí většího čísla
Kubátová 2007
0 1 2 4
≈
0 1 2
0 1 2 5
≈
0 1 3
Y36SAP-aritmetika
6
3
Řádová čárka vzhledem k ř.m. • Pevně definovaná pozice ⇒ čísla s pevnou řádovou čárkou (fixed-point) – nejpoužívanější rezervováno pro znaménko integer
fractional
• Řádová čárka je definována posunem vůči definované pozici ⇒ čísla s pohyblivou řádovou čárkou (floating-point) rezervováno pro znaménko
Počáteční pozice řád. čárky, vůči níž je vztažen „posun“. Kubátová 2007
číslo ve posun zlomkovém řád. čárky tvaru Y36SAP-aritmetika
7
Zobrazení záporných čísel • Standardní polyadické soustavy ⇒ pouze nezáporná čísla • Zobrazení záporných čísel ⇒ číselné kódy – popisují transformaci z omezené množiny celých čísel do omezené množiny nezáporných čísel
• Nejpoužívanější číselné kódy: – přímý – aditivní – doplňkový Kubátová 2007
Y36SAP-aritmetika
8
4
Přímý kód • Nejvyšší řád ř.m. představuje znaménko, zbytek ř.m. je absolutní hodnota • Znaménko reprezentováno číslicí: +…0,
-…1
• Znázornění zobrazení:
+/- absolutní hodnota
Kubátová 2007
Y36SAP-aritmetika
9
Příklady – přímý kód M = 1000 ... tzn. 3bitová čísla
-2510
P
1 0 2 5
+1012
P
0 1 0 1
+0,0510
P
0 0 5 0
-0,112
P
1 1 1 0
Kubátová 2007
Y36SAP-aritmetika
10
5
Sčítání a odčítání Pracuji zvlášť se znaménkem a absolutní hodnotou Absolutní hodnota je nezáporné číslo
Příklad pro 3 bitová nezáporná čísla:
Kubátová 2007
Y36SAP-aritmetika
11
Sčítání a odčítání v přímém kódu • A + B, A – B, výsledek ulož do A • kde A ~ (zA, aA), B ~ (zB, aB) • z – znaménko, a – absolutní hodnota
Kubátová 2007
Y36SAP-aritmetika
12
6
Aditivní kód • Též označovaný jako „kód s posunutou nulou“ • Formální definice:
A(X) = X + K
pro -K ≤ X < M - K
• K – vhodná konstanta často se volí: K=½Z
Kubátová 2007
Y36SAP-aritmetika
13
Příklady – aditivní kód A
-2510
K=5000
+0,0510
K=1,000
A
4
9
7
5
+1012
K=10002
1
0
5
0
-0,112
K=1,0002
A
Kubátová 2007
1
1
0
1
0
0
1
0
A
Y36SAP-aritmetika
14
7
Doplňkový kód Definice: D (X) =
X,
je-li X ¥ 0
M + X, je-li X < 0
Příklad – napsat všechna 3 bitová čísla (M = 1000, ε = 1, l = 3)
Znaménko je určeno prvním bitem zleva, ale tento bit je organickou součástí obrazu !!!
Kubátová 2007
Y36SAP-aritmetika
15
Doplňkový kód - pokračování • Obraz záporného čísla X je doplňkem jeho hodnoty do modulu M řádové mřížky • Př. D
-2510
D
9 9 7 5
+1012
0 0 5 0
-0,112
D
+0,0510
Kubátová 2007
0 1 0 1 D
Y36SAP-aritmetika
1 0 1 0
16
8
Sčítání a odčítání v doplňkovém kódu
Sečtou se obrazy a ignoruje se přenos !!!
Příklady – viz tabule a cvičení Kubátová 2007
Y36SAP-aritmetika
17
Přeplnění Přeplnění (overflow) není přenos (carry) !!!!!
Pro dvojkovou soustavu: XOR přenosů do a z nejvyššího řádu – Příklady minule .... A viz tabulka pro sčítačku Kubátová 2007
Y36SAP-aritmetika
18
9
Přeplnění a 0 0 0 0 1 1 1 1
b 0 0 1 1 0 0 1 1
p 0 1 0 1 0 1 0 1
Kubátová 2007
q 0 0 0 1 0 1 1 1
s 0 1 1 0 1 0 0 1
Overflow = p xor q
Y36SAP-aritmetika
19
Odčítání v doplňkovém kódu Příklad pro 3 bitová nezáporná čísla:
V doplňkovém kódu:
A – B = A + (-B)
D(B) + D(-B) = B + (-B) + M = M ï D(-B) = D(B) + 1 D B) = M - D(B) A – B = D(A) + D(B) + 1 detekce přeplnění je stejná jako u sčítání Kubátová 2007
Y36SAP-aritmetika
20
10
Dplňkový kód pro desítkovou soustavu 10´s complement Příklad – 3 místná desítková čísla: M = 100010 znaménko je určeno první číslicí zleva: 0 – 4 ....... + (kladná čísla) 5 – 9 ....... – (záporná čísla)
Kubátová 2007
Y36SAP-aritmetika
21
Pohyblivá řádová čárka • Čísla s pevnou řádovou čárkou mají výrazně omezený rozsah Př. z = 2, délka ř.m. l = 32 (tj. 32-bitové číslo) max. celé číslo
… A < 232 < 5·109
min. zlomkové číslo
… A > 2-32 > 2 ·10-9
• Pro zvětšení rozsahu přidáme exponent e X·ze … odpovídá posunu řádové čárky v čísle X o e ⇒ čísla s pohyblivou řádovou čárkou Kubátová 2007
Y36SAP-aritmetika
22
11
...pohyblivá řádová čárka • Řádová mřížka má 2 části (podmřížky): – mantisa (m) - informace o „hodnotě“ čísla, často zlomkový tvar – exponent (e) - informace o pozici řád. čárky, celé číslo
• m i e používají kódy pro zobrazení záporných čísel • Ukázky možných formátů ř.m. D(M)
± A(e) Kubátová 2007
D(e)
|m|
Př. (-25·102)10
9 9 7 5 0 0 4
Př. (0,02·10-5)10
0 4 9 5 0 2 0
Y36SAP-aritmetika
23
...pohyblivá řádová čárka • Normalizovaný tvar – je tvar čísla, kdy už nelze mantisu posunout více doleva – zjednodušuje aritmetické operace
• Normal. tvar operandů nezaručí normal. tvar výsledku ⇒ normalizace – tj. úprava výsledku na normal. tvar – nutno provádět po každé operaci
• Př.
0 5 0 0 2 5
..…nenormaliz. tvar ..…
0 0 2 5 0 0
…normalizovaný tvar ... Y36SAP-aritmetika
2 5 0 0 9 8
0 4 9 2 5 0 Kubátová 2007
A = 0,02510
24
12
...pohyblivá řádová čárka • Skrytá jednička – předpokl. z = 2, normaliz. tvar, M přímý kód, M ≠ 0, A(e) ≠ 0 ⇒ v nejvyšším řádu mantisy bude vždy 1 ⇒ tuto 1 můžeme „skrýt“ (tj. vynechat ze zápisu čísla v ř.m.) !!! A(e) = e2 - 112 !!! 1 0 0 A = 1,02 ... 0 1 0 0 0 0 1 0 0 0 0 0
– používá se např. u standardu ANSI/IEEE Std. 754 - 1985 – V případě A(e) = 0 se skrytá jednička nepoužívá!!! A = (2-3)2 ... 0
0 0 0 1 0 0 0
0 0 0 0 1 0 0
A = 02 ... 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
Kubátová 2007
Y36SAP-aritmetika
25
ANSI/IEEE Std. 754 - 1985 znaménko
exponent
mantisa
32 b
1b
8b
23 (24)b
64 b
1b
11b
52 (53)b
exponent – aditivní kód, K=127 mantisa – přímý kód, |M|<2
32 b:
Kubátová 2007
Y36SAP-aritmetika
26
13
Pohyblivá řádová čárka e
M
A
0
=0
0
0
≠0
(-1)s · M · 2-126
〈1..254 〉 255 = 0
(-1)s · (M + 1) · 2e-127
≠0
NaN (Not a Number)
255
Kubátová 2007
(-1)s · ∞
Skrytá jednička!
Y36SAP-aritmetika
27
…pohyblivá řádová čárka Např. -5810 = -11 10102 = (-1,1101 0 x 10101)2 |m| = 1,1101 0 → f = 1101 00....0 e = 101 → g = 1000 0100 1 1000 0100 1101 0000 00... 0 | C | 2 | 6 | 8 |0|0|0|0| v little endian je tedy postupně adr1 00 uloženo ve slabikově adr2 00 organizované paměti: adr3 68 adr4 C2 Kubátová 2007
Y36SAP-aritmetika
28
14
Aritmetika v pohyblivé ř.č. • Aritmetické operace: – sčítání/odčítání: Srovnat exponenty a sečíst/odečíst mantisy. – násobení: Sečíst exponenty a vynásobit mantisy. – dělení: Odečíst exponenty a vydělit mantisy. – porovnání: Srovnat exponenty a porovnat mantisy. – posuv: Posunem mantisy nebo zvětš./zmenš. exponentu.
• Normal. tvar operandů nezaručí normal. tvar výsledku ⇒ normalizace – tj. úprava výsledku na normal. tvar – nutno provádět po každé operaci Kubátová 2007
Y36SAP-aritmetika
29
Úloha: Zapište v normalizovaném tvaru. •
Předpokládejte délku délku ř.m. l = 12, přitom délka podmřížky exponentu je le = 4. Exponent v aditivním kódu, mantisa v přímém kódu, aditivní konstanta pro exponent je 8.
1. 2. 3. 4.
-(1010,112) 7,37510 13,C16 -(46,875 · 10-2)10
Kubátová 2007
1 1 1 0 0 1 0 1 0 1 1 0 0 1 0 1 1 1 1 1 0 1 1 0 0 1 1 0 1 1 0 0 1 1 1 1 0 0 1 1 1 1 1 1 1 0 0 0
Y36SAP-aritmetika
30
15
Příklad: Sčítání v pohyblivé ř.č. • Zapište čísla 3,510 a 0,62510 v normalizovaném tvaru a pak je sečtěte. 3,510 = 11,12 = 0,1112·22 0,62510 = 0,1012·20
0 1 0 1 0 1 1 1 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0
3,510 + 0,62510 = 0,1112·22 + 0,1012·20 = = (0,1112 + 0,001012) ·22 = = (1,000012) ·22 = 0,1000012 ·23
+
0 1 0 1 1 1 0 0 0 0 1 0
Kubátová 2007
Y36SAP-aritmetika
31
Příklad: Násobení v pohyblivé ř.č. • Zapište čísla 3,510 a 0,62510 v normalizovaném tvaru a pak je vynásobte. 3,510 = 0,1112·22 0,62510= 0,1012·20 × + +
Kubátová 2007
0 1 0 1 0 1 1 1 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0
0,1112 0,1012 0,01112 0,000002 0,0001112 0,1000112
×
0 1 0 1 0 1 0 0 0 1 1 0
Y36SAP-aritmetika
32
16
Úloha: Spočítejte v pohyblivé ř.č. Poznámka – spočtěte doma!!!
• Předpokládejte délku délku ř.m. l = 12, přitom délka podmřížky exponentu je le = 4. Exponent v aditivním kódu, mantisa v přímém kódu. 1. 10,37510 × 0,12510 2. 13,62510 + 1,37510 3. 4,C16 - 316 4. (-0,4062510·2-3) × (-0,2812510) Kubátová 2007
Y36SAP-aritmetika
33
Úloha: Spočítejte v pohyblivé ř.č.
1. 0 1 1 0 0 1 0 1 0 0 1 1 0 0 1 1 0 1 0 0 0 0 0 0
2. 0 1 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 1 0 1 1 0 0 0
3. 0 1 0 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 1 0 0 0 0 0
4. 1 0 1 0 0 1 1 0 1 0 0 0 1 0 1 1 1 1 0 0 1 0 0 0 Kubátová 2007
×
0 1 0 0 1 1 0 1 0 0 1 1
+
0 1 1 0 0 1 1 1 1 0 0 0
+
0 1 0 0 1 1 1 1 0 0 0 0
×
0 0 0 1 0 1 1 1 0 1 0 1
Y36SAP-aritmetika
34
17
Alfanumerické kódy
Kubátová 2007
Y36SAP-aritmetika
35
Kubátová 2007
Y36SAP-aritmetika
36
18