Struktura a architektura počítačů Aritmetické operace Pevná a pohyblivá řádová čárka České vysoké učení technické Fakulta elektrotechnická Ver.1.30 J. Zděnek / M. Chomát 2014
Aritmetické operace pevná řádová čárka Pevná řádová čárka (Fixed Point) Řádová čárka má vzhledem k řádové mřížce pevně definovanou pozici Nejčastěji používané formáty (v doplňkovém kódu): Integer (celá čísla) Př. Integer16 Fraction (čísla menší než 1) i = 15 14... 1 0 n=15, m=0 Značení Fx.y nebo Qx.y, kde x je počet řádových pozic před řádovou čárkou (n+1), y pak počet pozic za řádovou čárkou (m) Nejčastěji se používá formát F1.y, kdy před řádovou čárkou je pouze znaménkový bit (čísla v doplňkovém kódu) Př. Fraction F1.15 i = 0-1 -2... -15 n=0, m=15 A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 2
Aritmetické operace pevná řádová čárka Pevná řádová čárka (Fixed Point) shrnutí: Procesor řádovou čárku nesleduje (sledovat ji musí programátor) Procesor pracuje pouze nad bitovými obrazci Čísla bez znaménka (unsigned) jsou v přímém binárním kódu Čísla se znaménkem (signed) jsou kódována v doplňkovém kódu (Twos s Complement Code) (též dvojkový nebo druhý doplněk) K výpočtu doplňkového kódu stačí operace NOT a +1 Odčítání je možné nahradit přičtením čísla v doplňkovém kódu A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 3
Aritmetické operace pevná řádová čárka Pevná řádová čárka (Fixed Point) - shrnutí Instrukční soubor procesoru obsahuje vždy alespoň operace: Sčítání, not, and, or, posuvy vlevo a vpravo Pomocí těchto operací se ostatní operace (odčítání, násobení, dělení) dají sestavit. Některé procesory mají přímo instrukce pro: Přičtení 1, odečtení 1 (Increment, Decrement) Odčítání, Násobení, Dělení, Výpočet dvojkového doplňku (Negate, NEG), A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 4
Aritmetické operace pevná řádová čárka Pevná řádová čárka (Fixed Point) shrnutí: Důležité: Význam příznakových bitů (Flags, PSW, Status) pro aritmetické operace: Po aritmetických operacích (a některých dalších) se nastaví příznakové bity C, OV, AC, N, Z ve stavovém slově (Flags, PSW, Status) procesoru. Příznaky se použijí v dalších operacích: Pro spojení operací přesahujících šířku slova ALU V podmíněném větvení programu (podmíněné skoky), C (Carry) indikuje přenos z nejvyššího řádu použitého slova, pří odčítání má význam výpůjčky (borrow) z vyššího řádu. Používá se pro spojení operací sčítání a odčítání při šířce zpracovávaného slova větší než je šířka slova ALU. Indikuje přeplnění formátu u čísel bez znaménka. A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 5
Aritmetické operace pevná řádová čárka Pevná řádová čárka (Fixed Point) shrnutí: Důležité: Význam příznakových bitů (Flags, PSW, Status) pro aritmetické operace: OV (Overflow) sleduje přenos z nejvyššího a nejbližšího nižšího řádu použitého slova. Indikuje přeplnění formátu u čísel se znaménkem. OV = C s xor C s-1 AC (Auxiliary Carry)(též DC) indikuje přenos mezi třetím a čtvrtým bitem slova (Některé procesory ho nemají). Používá se pro dekadickou korekci pří počítání s binárně kódovanými desítkovými čísly (BCD - Binary Coded Decimal Numbers). A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 6
Aritmetické operace pevná řádová čárka Pevná řádová čárka (Fixed Point) shrnutí: Důležité: Význam příznakových bitů (FLAGs, PSW, Status) pro aritmetické operace: Z (Zero) indikuje, že výsledek předchozí operace ALU je nulový. Z = 1 pokud je výsledek nula, jinak Z = 0 (tj. výsledek nebyl nula) N (Negative) sleduje hodnotu nejvyššího bitu použitého slova. N = 1 pokud je výsledek operace záporné číslo (v doplňkovém kódu). ALU nerozlišuje, zda programátor považuje zpracovávané hodnoty za číslo se znaménkem nebo bez znaménka. ALU nastaví vždy všechny příznakové bity dle jejich definice. Programátor pak musí zvolit pro další operace správné příznaky a ty testovat nebo jinak použít. A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 7
pic18f Family ALU and Multiplier ORTHOGONAL INSTRUCTION SET DESIGN SPECIAL FUNCTION REGISTERS (SFR) MEMORY MAPPED INPUT/OUTPUT SPACE DATA MEMORY/ REGISTER FILE GENERAL PURPOSE REGISTERS (GPR) 8 8 8 8 8 WREG 8 ALU ACCUMULATOR 8 8 PRODH 16 MULTIPLIER (UNSIGNED) PRODL FLAGS STATUS ACCUMULATOR/REGISTER ORIENTED CPU A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 8
Výpočet dvojkového doplňku C( x) = NOT( C( x)) + 1 Př: x = 6 10 C( x) = 01102 x = 6 10 C( x) =? Výpočet: NOT( C( x)) C( x) = = 1001 2 + 1 1010 2 Kontrola: C( x) = 0110 + ( C( x)) = 1010 0 2 2 A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 9
Sčítání čísla bez znaménka (kladná) Jednobitové sčítání (pravdivostní tabulka): D a b c i c s s 0 0 0 0 0 0 1 0 0 1 0 1 2 0 1 0 0 1 3 0 1 1 1 0 4 1 0 0 0 1 5 1 0 1 1 0 6 1 1 0 1 0 7 1 1 1 1 1 Př. Vícebitové sčítání (předpoklad C i =0): 241 d = 1111 0001 b +7 d = 0000 0111 b 248 d = 1111 1000 b 250 d = 1111 1010 b +8 d = 0000 1000 b 258 d 0000 0010 b C s = 0 C s = 1 Mimo formát: A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 10
Odečítání čísla bez znaménka (kladná) Jednobitové odčítání (pravdivostní tabulka) d = i a b c i i i D a i b i c i c s d i 0 0 0 0 0 0 1 0 0 1 1 1 2 0 1 0 1 1 3 0 1 1 1 0 4 1 0 0 0 1 5 1 0 1 0 0 6 1 1 0 0 0 7 1 1 1 1 1 Př. Vícebitové odčítání (předpoklad C i =0, význam borrow ): (borrow) C s = 0 243 d = 1111 0011 b 7 d = 0000 0111 b 236 d = 1110 1100 b A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 11
Přeplnění (Overflow) čísla se znaménkem U čísel se znaménkem je přeplnění (Overflow), tj. výsledek je mimo formát, indikováno nastavením příznakového bitu OV (Overflow). Bit OV je součástí stavového slova procesoru (PSW, Flags). Logika bitu OV musí sledovat přenos z posledního a ještě předposledního bitu formátu. OV = C s xor C s-1 Odečítání pomocí dvojkového doplňku (Two s Complement) Tento způsob je použitý v počítači d = x y = x + ( y) = x + ( NOT ( y) + 1) A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 12
Přeplnění (Overflow) čísla se znaménkem Př: Přeplnění z formátu (M=1000, zde formát +7,-8) 7 d = 0 1 1 1 b 7 d = 1 0 0 1 b 0 d = 0 0 0 0 b C s C s-1 OV=0 4 d = 0 1 0 0 b 3 d = 0 0 1 1 b 7 d = 0 1 1 1 b x x C s C s-1 OV=0 4 d = 1 1 0 0 b 4 d = 1 1 0 0 b 8 d = 1 0 0 0 b C s C s-1 OV=0 4 d = 0 1 0 0 b 4 d = 0 1 0 0 b 8 d 1 0 0 0 b x C s C s-1 OV=1 6 d = 0 1 1 0 b 3 d = 0 0 1 1 b 9 d 1 0 0 1 b x C s C s-1 OV=1 4 d = 1 1 0 0 b 5 d = 1 0 1 1 b 9 d 0 1 1 1 b x C s C s-1 OV=1 A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 13
Sčítání a odčítání čísla se znaménkem Př. Sčítání a odčítání 4bitovou sčítačkou ve dvojkovém doplňku 73 d = 0100 b 1001 b +27 d = 0001 b 1011 b C s 1 b C s 0 b 100 d = 0110 b 0100 x x b C s C s-1 OV=0 73 d = 0100 b 1001 b 27 d = 1110 b 0101 b C s 0 b C s 0 b 46 d = 0010 b 1110 b C s C s-1 OV=0 120 d = 0111 b 1000 b +16 d = 0001 b 0000 b C s 0 b C s 0 b 136 d 1000 b 1000 b x C s C s-1 OV=1 120 d = 1000 b 1000 b 16 d = 1111 b 0000 b C s 0 b C s 0 b 136 d 0111 b 1000 b x C s C s-1 OV=1 A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 14
Násobení bez znaménka V desítkové soustavě (připomenutí): 143 x 246 = 35178 858 143 x 6.10 0 +5720 143 x 4.10 1 +28600 143 x 2.10 2 35178 součet Zapisujeme přehledněji (Viz následující strana) Ve dvojkové soustavě (stejný princip): Př. 9 d x 6 d = 54 d 1001 x 0110 = 0110110 0000 1001 x 0.2 0 +10010 1001 x 1.2 1 +100100 1001 x 1.2 2 +0000000 1001 x 0.2 3 0110110 součet Zapisujeme přehledněji (Viz následující strana) A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 15
Násobení bez znaménka - postup V desítkové soustavě (připomenutí): 143 x 246 = 35178 858 143 x 6.10 0 +572 143 x 4.10 1 +286 143 x 2.10 2 35178 součet Ve dvojkové soustavě (stejný princip): Př: 9 d x 6 d = 54 d 1001 x 0110 = 0110110 0000 1001 x 0.2 0 +1001 1001 x 1.2 1 +1001 1001 x 1.2 2 +0000 1001 x 0.2 3 0110110 součet A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 16
Násobení bez znaménka - algoritmus product = a x b, (8 x 8 = 16 bits) UMul UMulInit: add a 0 0 0 0 0 prod 0 0 0 0 0 0 0 0 b count = 8 UMulNextCycle: prod prod? count = 0 no yes b yes 0 0 0? LSB = 1 no add + 0 prod shift 1 bit count = count-1 prod product = a x b A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 17
Násobení bez znaménka - příklad Př. 4 x 4 = 8 bitů Desítkově: a = 7, b = 4, p = 7 x 4 = 28 Dvojkově: a = 0111 b, b = 0100 b, p =? Init add 0111 0000 a + 0000 prod 0000 0100 0000 + b Step 1) prod 0000 0100 shift logical right 2) prod 0000 0010 shift logical right 3) prod 0000 0001 add 0111 0000 add & shift logical right prod 0111 0001 prod + add prod 0011 1000 shift logical right 4) prod 0001 1100 = 28 d A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 18
Násobení bez znaménka - realizace ; ****************************************************************** ; Unsigned multiplication algorithm ; ; 8 x 8 = 16 bit ; ; a, b E (0, 255) ; ; inputs: addh, addl addh = a multiplicand, addl = 0 ; prodh, prodl prodh = 0, prodl = b multiplier ; ; outputs: prodh, prodl product ; ; affects: STATUS, WREG ; ;******************************************************************** #define BIT0 0 #define BIT7 7 #define F 1 #define UMul_LOOP_CNT 9 A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 19
Násobení bez znaménka - realizace UMul: movlw UMul_LOOP_CNT ; Preset loop counter movwf loopctr UMulNextCycle: dcfsnz loopctr ; Run loop 8 times bra UmExit UmTestLsb: btfsc prodl, BIT0 bra UmAdd ; LSB=1 bcf STATUS, C ; Clear C = SLR only bra UmSar ; LSb=0 UmAdd: movff addl, WREG ; Add multiplicand to partial product addwf prodl, F movff addh, WREG addwfc prodh, F bra UmSar UmSar: ; Shift logical right, including C rrcf prodh ; Shift partial product 1 bit right rrcf prodl ; 16bit shift bra UMulNextCycle UmExit: return A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 20
Násobení se znaménkem - postup Čísla v doplňkovém kódu (Two s Complement) Př. 4 x 4 = 8 bitů Desítkově: a = 3 b = -5, p = 3 x (-5) = -15 Dvojkově: a = 0011 b, b = 1011 b, p =? 0011 x 1011 = 1111 0001 b 00000 partial sum = 00000 00011 + x sign extension (not carry) 000011 = xxxx xxx1 00011 + 000100 = xxxx xx01 00000 + 000010 = xxxx x001 11101 Last step minus (+ two s complement) 11110 = 1111 0001 b = -15 d A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 21
Násobení se znaménkem - postup Čísla v doplňkovém kódu (Two s Complement) Př. 4 x 4 = 8 bitů Desítkově: a = 3 b = 5, p = 3 x 5 = 15 Dvojkově: a = 0011 b, b = 0101 b, p =? 0011 x 0101 = 0000 1111 b 00000 partial sum = 00000 00011 + x sign extension (not carry) 000011 = xxxx xxx1 00000 + 000001 = xxxx xx11 00011 + 000011 = xxxx x111 00000 Last step minus (+ two s complement) 00001 = 0000 1111 b = 15 d A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 22
Násobení se znaménkem - postup Čísla v doplňkovém kódu (Two s Complement) Př. 4 x 4 = 8 bitů Desítkově: a = -3 b = -5, p = (-3) x (-5) = 15 Dvojkově: a = 1101 b, b = 1011 b, p =? 1101 x 1011 = 0000 1111 b 00000 partial sum = 00000 11101 + x sign extension (not carry) 111101 = xxxx xxx1 11101 + 111011 = xxxx xx11 00000 + 111101 = xxxx x111 00011 Last step minus (+ two s complement) 00001 = 0000 1111 b = 15 d A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 23
Násobení se znaménkem - algoritmus product = a x b, (8 x 8 = 16 bits) SMul SMulInit: add +a 0 0 0 0 0 0 0 0 sub a 0 0 0 0 0 0 0 0 prod 0 0 0 0 0 0 0 0 b SMulNextCycle: count = 7 no? count = 0 yes prod b prod b yes? LSB = 1 no yes? LSB = 1 no prod prod add + sub + prod shift 1 bit prod shift 1 bit count = count-1 prod product = a x b A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 24
Násobení se znaménkem - příklad Př. 4 x 4 = 8 bitů Desítkově: a = 3, b = -5, p = 3 x (-5) = -15 Dvojkově: a = 0011 b, b = 1101 b, p =? Init: add 0011 0000 +a + 0000 sub 1101 0000 a + 0000 prod 0000 1011 0000 + b Pokračování na dalším snímku A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 25
Násobení se znaménkem - příklad Step 1) prod 0000 1011 add 0011 0000 prod add & shift arithm. right 0011 1011 shift arithm. right 2) prod add & shift arithm. 0001 1101 right add 0011 0000 prod 0100 1101 shift arithm. right 3) prod 0010 0110 shift arithm. right 4) prod sub & shift arithm. 0001 0011 right sub 1101 0000 (i.e. add a) prod 1110 0011 shift arithm. right prod 1111 0001 = -15 d A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 26
Násobení se znaménkem - realizace ; ****************************************************************** ; Signed multiplication algorithm ; ; 8 x 8 = 16 bit ; ; a, b E (-128,127) ; ; inputs: addh,addl addh = a multiplicand, addl = 0 ; subh,subl subh = -a multiplicand, subl = 0 ; prodh,prodl prodh = 0, prodl = b multiplier ; ; outputs: prodh,prodl product ; ; affects: STATUS, WREG ; ;******************************************************************** #define BIT0 0 #define BIT7 7 #define F 1 #define SMul_LOOP_CNT 9 #define SMul_LAST_CYCLE 1 A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 27
Násobení se znaménkem - realizace SMul: movlw SMul_LOOP_CNT ; Preset loop counter movwf loopctr SMulNextCycle: dcfsnz loopctr ; Run loop 8 times bra BmExit SmTestLsb: btfss prodl, BIT0 ;? multiply by 0 bra SmSar ; yes, shift only movlw SMul_LAST_CYCLE cpfsgt loopctr ;?last cycle bra SmSub ; yes, subtract multiplicand bra SmAdd ; no, add multiplicand SmAdd: movff addl,wreg addwf prodl, F movff addh, WREG addwfc prodh, F movff addh, WREG bra SmSar A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 28
Násobení se znaménkem - realizace SmSub: movff subl,wreg addwf prodl, F movff subh, WREG addwfc prodh, F movff subh, WREG bra SmSar SmSar: ; Extend correct sign bsf STATUS, C ; preset sign btfss WREG, BIT7 ;? number positive bcf STATUS, C ; yes, clear sign rrcf prodh ; shift arithmetic right 1 bit rrcf prodl ; 16bit shift bra SMulNextCycle BmExit: return A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 29
Násobení 16 x 16 = 32 násobičkou 8 x 8 = 16 Použití hardwarové násobičky 8 x 8 = 16 bitů k násobení čísel 16 x 16 = 32 bitů (zde příklad násobičky čísel bez znaménka) 8 8 16 8 8 ( m.2 + r).( a.2 + b) = m. a.2 + r. a.2 + m. b.2 + r. b x = 16 16 32 m 0 0 a 0 0 8 + 8 8 + 8 r b 8 8 = m. a + 16 r. a 16 + m. b 16 + r. b 16 32 A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 30
Dělení bez znaménka V desítkové soustavě (připomenutí): Dělení beze zbytku 35178 / 143 = 246 podíl 286 143 x 2.10 2 657-572 143 x 4.10 1 858-858 143 x 6.10 2 0 zbytek A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 31
Dělení bez znaménka V desítkové soustavě (připomenutí): Dělení se zbytkem 78 / 5 = 15 + 3/5 podíl 5 5 x 1.10 1 28-25 5 x 5.10 0 3 zbytek po dělení A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 32
Dělení bez znaménka Ve dvojkové soustavě (stejný princip): Př. 78 / 5 = 15 + 3/5 01001110 / 0101 = 01111 + 0011/0101 podíl -0000 0101 x 0.2 4 01001-0101 0101 x 1.2 3 01001-0101 0101 x 1.2 2 01001-0101 0101 x 1.2 1 01000-0101 0101 x 1.2 0 0011 zbytek po dělení A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 33
Aritmetické operace - chyby Rozsah zobrazení čísel v počítači je omezený: Velikostí registrů, velikostí paměti, Formát zobrazitelných čísel určuje použitá řádová mřížka (ř.m.) ř.m. definuje nejvyšší (n) a nejnižší (-m) dvojkového čísla. Při aritmetických operacích v dané ř.m. vznikají chyby: Při přeplnění formátu směrem nahoru (přes n) vznikají neodstranitelné (hrubé) chyby. Pro správnou funkci je nutné řádovou mřížku rozšířit (zvětšit n). Při přeplnění formátu směrem dolů (pod m) dochází ke ztrátě přesnosti. Velikost chyby můžeme ovlivnit: Rozšířením ř.m. směrem dolů (zvětšit m) Způsobem zaokrouhlování výsledku. A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 34
Aritmetické operace - zaokrouhlování Způsoby zaokrouhlování při přeplnění formátu ř.m. směrem dolů (pod -m) Preference většího čísla 1,434 1,43 1,435 1,44 Preference sudé číslice 1,434 1,43 1,435 1,44 1,436 1,44 Zaokrouhlení dolů (oříznutí) 1,435 1,43 Zaokrouhlení nahoru 1,432 +0,01 =1,442 1,44 A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 35
Pohyblivá řádová čárka Čísla v pohyblivé řádové čárce (Floating Point) mají tvar: kde: x m z e z =. m mantisa (mantissa, significant) e exponent (characteristic, exponent) z základ číselné soustavy m mantisa obsahuje informace o hodnotě čísla. e - exponent obsahuje informace o pozici řádové čárky. K vyjádření m a e používáme kódy pro zobrazení záporných čísel. Čísla v pevné řádové čárce mají značně omezený rozsah hodnot. Pro zvětšení rozsahu hodnot používáme formát pohyblivé řádové čárky. A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 36
Pohyblivá řádová čárka V desítkové soustavě čísla v pohyblivé řádové čárce běžně používáme. V desítkové soustavě má pohyblivá řádová čárka formát: ± e x d = ± m.10 Př. +3,582. 10 2 = 3,582. 100 = 358 +3,582. 10-3 = 3,582. 0,001 = 0,003582-2,47. 10 1 = -2,47. 10 = -24,7-2,47. 10-1 = -2,47. 0,1 = -0,247 Ve dvojkové soustavě používá formát čísel v pohyblivé čárce stejné principy jako v soustavě desítkové. Kódování m (mantisy) a e (exponentu) je ale jiné. V počítačích se používá několik různých formátů čísel v pohyblivé čárce. A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 37
Pohyblivá řádová čárka IEEE Std.754 Nejčastěji se používá formát pohyblivé řádové čárky podle normy ANSI/IEEE Standard 754 Formát čísla dle této normy má tvar: s E BIAS s e xd = ( 1).2. m = ( 1).2. m mantisa je kódovaná přímým kódem (Sign&Magnitude) s znaménkový bit mantisy m normalizovaný tvar absolutní hodnoty mantisy, m<2 m je normalizovaná na tvar 1,xxx, jedničku před řádovou čárkou pak není třeba uchovávat v paměti (ušetří se 1 bit pro zvýšení přesnosti). Takové jedničce se říká skrytá. e exponent je kódovaný aditivním kódem (Biased Code) Formát dle IEEE 754 má dvě formy: Single precision celkem 32 bitů Double precision celkem 64 bitů A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 38
Pohyblivá řádová čárka IEEE Std.754 Hodnoty čísla x d ve formátu Single Precision (32 bitů): q zlomková část mantisy (ostatní značení viz předchozí snímek) E q s x d Komentář 1-254 q 0 / 1 s E 127 Normalizovaný tvar 0 0 0 / 1 s 126 Denormalizovaný tvar 0 0 0 0 0 1 255 0 0 255 0 1 xd = ( 1).2.(1 + q) x = d ( 1).2. x d x d x d x d = 0 = x d = 0 = + = NaN 255 > 0 0 / 1 Not a Number q A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 39
Pohyblivá řádová čárka IEEE Std.754 Dvě varianty formátu dle IEEE 754: Precision Memory Sign Exponent Bias (K) Mantissa Single 32b 1b 8b 127 23b (24b) Double 64b 1b 11b 1023 52b (53b) Formát Single Precision v paměti: 32 bits s Biased Exponent Mantissa (Fractional part) 31 30 23 22 0 8 bits 23 bits + implicit 1, Formát Double Precision v paměti: 64 bits s Biased Exponent Mantissa (Fractional part) 63 62 52 51 0 11 bits 52 bits + implicit 1, A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 40
Pohyblivá řádová čárka IEEE Std.754 Př. Převeďte číslo 162,125 d do formátu Single precision IEEE 754. 1) Převod 162 d do dvojkového formátu (postupným dělením 2) 162 d = 10100010 b 2) Převod 0,125d do dvojkového formátu (postupným násobením 2) 0,125 d = 0,001 b 3) Formát celého čísla 162,125 d v binárním tvaru 162,125 d = 10100010,001 b 4) Normalizace ( m < 2) 10100010,001 = 1,0100010001.2 7 = 1,0100010001.2 111b tedy: e = 7 d = 111 b 5) Zápis čísla ve formátu Single Precision dle IEEE 754 BIAS = 127, e = E BIAS E = e + BIAS = 7+127 = 134 = 10000110 b Implicit 1, 1 32 bits 0 10000110 01000100010000000000000 Exponent Mantissa 8 bits 23 bits Sign A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 41
Sčítání / odčítání Pohyblivá řádová čárka aritmetické operace Srovnat exponenty a sečíst/odečíst mantisy. x y x x + y + x x + y x y : a.2 ± b.2 = a.2 ± b.2 = ( a. ± b.2 ). 2 x x y x y + y y y + x y x< y : a.2 ± b.2 = a.2 ± b.2 = ( a.2 ± b.). 2 Násobení Sečíst exponenty, vynásobit mantisy. Dělení Odečíst exponenty, vydělit mantisy. Porovnání Srovnat exponenty, porovnat mantisy. Normalizace Normalizovaný tvar vstupních operandů operace nezaručí normalizovaný tvar výsledku. Normalizaci (úpravu výsledku do normalizovaného tvaru) je nutné provádět po každé operaci. A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 42
FPU platformy x86 FPU (Floating Point Unit) některých platforem mají mimo základních operací (+,, *, /) instrukce i pro další matematické operace. Např. FPU platformy x86 (tj. PC) vykonává v pohyblivé řádové čárce tyto operace: Basic operations : + add subtract * multipoly / divide Konst : 1.0 log log log log π 2 2 10 e e 10 2 2 Functions : x = x compare 2 x 1 y.log y.log 2 2 x ( x + 1) Functions : sin ( x) cos( x) sin ( x),cos( x) tg ( x) arctq ( x) x Vztahy pro prepocet ( FPU neumi pocitat primo) : 10 x x. log 2(10) x.log 2( e) x.log 2( y) = 2 e x = 2 y x = 2 A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 43
Struktura a architektura počítačů Aritmetické operace Pevná a pohyblivá řádová čárka KONEC České vysoké učení technické Fakulta elektrotechnická A7B14SAP Struktura a architektura počítačů 10 - Aritmetické operace 44