Aritmetica în sistemele de calcul Sisteme de numeraţie



Yüklə 138,44 Kb.
tarix30.10.2017
ölçüsü138,44 Kb.
#22625

Aritmetica în sistemele de calcul

1. Sisteme de numeraţie
Un sistem de numeraţie este reprezentat prin totalitatea regulilor de reprezentare a numerelor, cu ajutorul unor simboluri numite cifre. Cifra este un simbol care reprezintă o cantitate întreagă.

Baza (rădăcina) sistemului de numeraţie este numărul de simboluri diferite permise pentru reprezentarea numerelor.

În sistemele de calcul se utilizează sistemul de numeraţie binar, B2 = {0,1}, acesta prezentând o serie de avantaje:



  • existenţa unei corespondenţe biunivoce cu stările stabile ale unui circuit electronic digital;

  • are o aritmetică simplă;

  • analiza şi sinteza blocurilor funcţionale ale calculatorului se pot efectua cu ajutorul algebrei booleene, construită pe mulţimea B2.

Conversia unui număr dintr-o bază de numeraţie α într-o nouă bază de numeraţie β se face examinând separat partea întreagă şi partea fracţionară.

Să luăm, de exemplu, numărul 121,45 în zecimal. Se doreşte transformarea acestuia în baza 2. Pentru a putea realiza acest lucru, vom privi numărul dat ca două numere distincte: partea întreagă 121 şi partea fracţionară 0,45. Prima dată vom transforma numărul 121 în binar, prin împărţiri succesive la 2 şi prin luarea resturilor obţinute la împărţiri în ordinea inversă a obţinerii.

12110 = 11110012

Pentru a transforma partea fracţionară 0,45 în binar va trebui să efectuăm înmulţiri succesive cu 2 şi să preluăm partea întreagă a rezultatelor.

0,45 * 2 = 0,9 -> 0

0,9 * 2 = 1,8 -> 1

0,8 * 2 = 1,6 -> 1

0,6 * 2 = 1,2 -> 1

Algoritmul se opreşte în momentul în care partea fracţionară devine 0 sau s-a atins precizia dorită (numărul de cifre pentru reprezentarea rezultatului).



0,4510 = 0,011100112

Prin concatenarea rezultatelor parţiale se obţine rezultatul final al conversiei. Astfel:

121,4510 = 1111001,011100112

Observaţie: În timp ce numerele întregi se pot reprezenta exact în binar, numerele subunitare se reprezintă aproximativ, făcând excepţie numai acele numere subunitare care se pot scrie sub forma de sumă de puteri negative ale lui 2 (0,5; 0,25 etc.).
Pentru transformarea inversă, din binar în zecimal, vom înmulţi biţii numărului cu puterile lui 2 corespunzătoare rangului cifrei.

10110101,01101012 = 1*27 + 0*26 + 1*25 + 1*24 + 0*23 + 1*22 + 0*21 + 1*20 + 0*2-1 + 1*2-2 + 1*2-3 + 0*2-4 + 1*2-5 + 0*2-6 + 1*2-7 ≈ 181,414



2. Reprezentarea numerelor întregi
Numerele întregi se reprezintă în calculator în formatul cu virgulă fixă. Numărul de biţi utilizaţi pentru reprezentare (n), determină numărul de valori distincte reprezentabile (2n). Pentru reprezentarea în calculator a numerelor întregi fără semn se utilizează următoarele coduri:

  1. codul binar ponderat – poziţia fiecărui bit din reprezentare determină ponderea sa în calculul valorii. Numărul se reprezintă prin valoarea sa, pe toţi cei n biţi ai reprezentării, domeniul de valori fiind [0, 2n - 1].

Ex.: 1101 => 13

  1. codul Gray – are proprietatea că două valori adiacente în cod diferă printr-un singur bit. În tabelul următor este prezentat codul Gray pe 4 biţi.




Valoare (hexa)

Cod binar

Cod Gray

0

0000

0000

1

0001

0001

2

0010

0011

3

0011

0010

4

0100

0110

5

0101

0111

6

0110

0101

7

0111

0100

8

1000

1100

9

1001

1101

A

1010

1111

B

1011

1110

C

1100

1010

D

1101

1011

E

1110

1001

F

1111

1000

În multe aplicaţii se lucrează însă cu numere întregi cu semn (numere algebrice), deci este necesară reprezentarea unui astfel de număr, folosind bitul de semn. Numerele algebrice pozitive se reprezintă întotdeauna prin valoare (mărime), având bitul de semn egal cu 0. Numerele negative se pot reprezenta în calculator utilizând diferite coduri. Dintre aceste coduri de reprezentare fac parte:




  1. codul direct

Numerele întregi se reprezintă prin mărime (valoare absolută) şi semn. Pentru numerele negative, bitul cel mai semnificativ (de semn) este 1, iar celalţi n-1 biţi servesc pentru reprezentarea valorii absolute a numărului.

Ex.: N = -5 pe 8 biţi => 10000101




  1. codul invers (complement faţă de 1)

Pentru numerele negative, bitul de semn este 1, ceilalţi n-1 biţi servind pentru reprezentarea valorii absolute negate a numărului. Negarea se realizează la nivel de bit: biţii 0 devin 1 şi biţii 1 devin 0.

Ex.: N = -5 pe 8 biţi => 11111010




  1. codul complementar (complement faţă de 2)

Pentru reprezentarea numerelor negative se aplică următoarea regulă de complementare: se reprezintă numărul în valoare absolută, apoi se inversează bit cu bit, inclusiv bitul de semn (care devine 1) şi se adună 1 la rezultatul obţinut. Deci, complementul faţă de 2 se obţine din complementul faţă de 1, la care se adaugă 1.
Ex.: N = -5 pe 8 biţi se reprezintă astfel:

|N| = 5, adică 00000101

prin inversare devine 11111010+

1

11111011



  1. cod în exces

Această codificare constă în adunarea unei valori constante la fiecare număr întreg (pozitiv sau negativ) care se reprezintă. Valoarea constantă notată E care se adună, este de regulă 2n-1, cu n numărul de biţi ai reprezentării.

Matematic, un număr întreg N se reprezintă în cod exces E prin: E + N.

Ex.: Numerele N1 = 5 şi N2 = -5 se reprezintă pe n = 8 biţi, în exces 27 = 128, prin:

128 + 5 = 133 respectiv 128 + (-5) = 123


E 10000000 10000000

N 00000101 11111011

10000101 01111011
Fie D domeniul de numere întregi ce se pot reprezenta pe n biţi: D = [-2n-1, 2n-1-1]. Utilizând codul exces 2n-1, domeniul D se transformă în domeniul de valori pozitive D’ = [0, 2n-1].

Deci, codul în exces poate transforma un domeniu de numere algebrice într-un domeniu de numere aritmetice. Avantajul este că operaţiile cu numere aritmetice se implementează mai simplu (în hardware sau în software) decât operaţiile cu numere algebrice.



3. Operaţii cu numere reprezentate în virgulă fixă
3.1. Adunarea şi scăderea în complement faţă de doi
Operaţiile de adunare şi scădere se reduc la operaţia de adunare a numerelor reprezentate în cod complementar. Se adună cei doi operanzi bit cu bit, inclusiv biţii de semn, iar eventualul transport care rezultă de la bitul de semn se va neglija. Rezultatul este obţinut în cod complementar.
Exemple:

  1. x = 9, y = 5

00001001+ 9 + 5 = 14



00000101

00001110





  1. x = 9, y = -5

Mai întâi vom reprezenta -5 în complement faţă de doi:

-5 => 11111011

După care realizăm adunarea:

00001001+ 9 - 5 = 4



11111011

00000100



  1. x = 5, y = -9

y = -9 în complement faţă de 2 va fi: -9 => 11110111


00000101+ 5 – 9 = -4

11110111

11111100
Rezultatul obţinut este negativ (bitul de semn are valoarea 1), reprezentat în complement faţă de 2. Pentru a afla valoarea absolută a rezultatului va trebui să îl complementăm din nou faţă de 2.

Prin inversare se obţine: 00000011+

1

00000100 = 4


3.2. Înmulţirea numerelor fără semn
Regulile de înmulţire binară sunt prezentate mai jos:


Deînmulţit

Înmulţitor

Produs

0

0

0

0

1

0

1

0

0

1

1

1

Prezentăm mai jos înmulţirea a două numere binare de câte 4 biţi:

deînmulţitul 1011 11

înmulţitorul 1101 13

1011

0000


1011

1011

produs 10001111 143


Rezultatul se obţine pe lungime dublă, realizându-se trunchierea acestuia la lungimea simplă, dacă este necesar.

Pentru operaţia de înmulţire pot fi stabilite următoarele reguli:



  1. dacă bitul LSB al înmulţitorului este 1, se scrie dedesubt deînmulţitul deplasat cu o poziţie la stânga;

  2. dacă LSB este 0 se scrie dedesubt un număr de zerouri egal cu numărul de cifre al deînmulţitului şi apoi se face deplasarea cu o poziţie la stânga;

  3. pentru fiecare bit al înmulţitorului se repetă paşii 1) sau 2) după caz;

  4. se adună toate produsele parţiale pentru a forma rezultatul final.

3.3. Împărţirea numerelor fără semn
Operaţia de împărţire poate fi privită ca o scădere repetată a împărţitorului din deîmpărţit. Numărul care arată de câte ori se poate aplica scăderea formează câtul, iar reziduul rămas după ultima scădere formează restul.
1101 10 13:2 => cât 6, rest 1

10 110

10

10

01


00

01

3.4. Înmulţirea numerelor în complement faţă de 2. Metoda lui Booth


Înmulţirea a două numere binare cu semn utilizând deplasarea şi adunarea produselor parţiale ridică unele probleme complicate privind testarea semnelor şi execuţia corecţiilor necesare.

O metodă alternativă ar consta în salvarea semnelorcelor două numere, conversia numerelor negative în numere pozitive şi apoi realizarea operaţiei de înmulţire conform algoritmului descris mai sus. Dacă semnele operanzilor sunt diferite, rezultatul este negativ şi produsul se va converti înapoi în complement faţă de 2.

Complicaţiile metodelor descrise anterior pot fi înlăturate folosind metoda lui Booth unde, deasemenea, procedura nu ţine cont de semnul înmulţitorului. În această metodă cifrele înmulţitorului sunt examinate în perechi, începând cu cea mai puţin semnificativă pereche; deînmulţitul este adunat sau scăzut din produsul parţial acumulat, în funcţie de informaţia obţinută în urma comparaţiei biţilor înmulţitorului. Algoritmul pentru această metodă poate fi enunţat astfel:


  1. dacă cifrele comparate sunt 00 sau 11 nu se efectuează nimic şi se deplasează înmulţitorul şi produsul parţial cu o poziţie spre dreapta;

  2. dacă cifrele comparate sunt 10, se scade deînmulţitul (adică se adună complementul său faţă de doi) din produsul parţial acumulat şi se deplasează cu o poziţie la dreapta:

  3. dacă cifrele comparate sunt 01, se adună deînmulţitul la produsul parţial acumulat şi se deplasează cu o poziţie la dreapta.


Obs.: La deplasarea la dreapta a unui număr, se repetă bitul de semn în partea stângă.

Pentru prima comparaţie se plasează un 0 după bitul LSB, prima comparaţie făcându-se între acest bit şi bitul LSB.


Ex.: D = +12 = 0,1100

bitul de semn



I = -14 = 1,0010 -14 este scris în complement faţă de doi


deînmulţitul 0,1100 +12

înmulţitorul 1,0010[0] -14

0,000000000

00 => depl. dreapta 0,000000000 primul produs parţial

10 => scădere 1,0100

1,010000000 al doilea produs partial

depl. dreapta 1,101000000

01 => adunare 0,1100

ignoră carry 0,011000000 al treilea produs partial

depl. dreapta 0,001100000

00 => depl.dreapta 0,000110000 al patrulea prod. partial

10 => scădere 1,0100

1,010110000

depl. dreapta 1,101011000 rezultatul înmulţirii


Rezultatul este negativ => complementare faţă de doi:
0,010100111 inversare rezultat

1 adună 1

0,010101000 = 168


Deci, 12*(-14) = -168.
Obs.: Înainte de începerea înmulţirii, numerele negative se complementează faţă de doi.
3.5. Împărţirea numerelor în complement faţă de doi. Algoritmul cu restaurare.
Iniţial se examinează semnul deîmpărţitului şi al împărţitorului, pentru a determina semnele câtului şi restului.
Deîmpărţit Împărţitor Cât Rest

> 0 > 0 > 0 > 0

> 0 < 0 < 0 > 0

< 0 > 0 < 0 < 0

< 0 < 0 > 0 < 0
Mărimile câtului şi restului se determină după ce atât deîmpărţitul cât şi împărţitorul se convertesc în numere pozitive, dacă este cazul. După ce mărimile câtului şi restului au fost determinate, se convertesc în complement faţă de doi.

Metoda utilizată mai jos se numeşte algoritmul cu restaurare. El poate fi sintetizat astfel:




  1. se aliniază biţii cei mai semnificativi ai deîmpărţitului şi împărţitorului;

  2. se scade împărţitorul din deîmpărţit (adică se adună complementul faţă de doi al împărţitorului la deîmpărţit);

  3. dacă noul bit din poziţia cea mai semnificativă este 1, rezultatul este negativ, se regenerează deîmpărţitul, se deplasează la dreapta împărţitorul şi se preia bitul pentru cât ca fiind 0;

  4. dacă noul bit din poziţia cea mai semnificativă este 0, rezultatul este pozitiv, se deplasează împărţitorul la dreapta şi se preia bitul pentru cât ca fiind 1;

  5. se repetă paşii 2) şi 3) sau 4) până când LSB-ul împărţitorului şi al deîmpărţitului se aliniază.

Obs.: La deplasarea împărţitorului la dreapta se repetă bitul de semn.


Exemplu: D = 179 = 0,10110011

Î = 12 = 0,1100 => complement faţă de doi = 1,0100


0,10110011

1,0100 scade împărţitorul (adună compl. faţă de doi)

1,11110011 rezultat negativ =>restaurare deîmpărţit

preia 0 pentru cât

0,10110011



1,10100 depl. dreapta împărţitor şi scade

ignoră carry 0,01010011 rezultat pozitiv => preia 1 pentru cât



1,110100 depl. dreapta împărţitor şi scade

ignoră carry 0,00100011 rezultat pozitiv => preia 1 pentru cât



1,1110100 depl. dreapta împărţitor şi scade

ignoră carry 0,00001011 rezultat pozitiv => preia 1 pentru cât



1,11110100 depl. dreapta împărţitor şi scade

1,11111111 rezultat negaitv =>restaurare deîmpărţit

preia 0 pentru cât

restul 0,00001011 deîmpărţit restaurat


Deci, câtul = 0,1110 = 14

restul = 0,00001011 = 11


4. Reprezentarea cifrelor zecimale
Numerele zecimale, alcătuite din cifrele 0-9, se reprezintă în diferite coduri. Aceste coduri sunt utilizate mai ales de sisteme sau de dispozitive pe 4 biţi. Cel mai utilizat cod este codul zecimal codificat binar, BCD (Binary Coded Decimal). Cifrele de la 0 la 9 sunt reprezentate prin valori binare echivalente, pe câte 4 biţi, conform tabelului următor:


Cifra

Cod BCD

0

0000

1

0001

2

0010

3

0011

4

0100

5

0101

6

0110

7

0111

8

1000

9

1001

Avantajul acestei codificări este corespondenţa directă între cifra zecimală şi valoarea sa. O altă modalitate de reprezentare a cifrelor zecimale este codul BCD în exces 3. Cifrele zecimale sunt reprezentate pe câte 4 biţi, prin valorile cuprinse între 3 (0011) şi 12 (1100).

Pentru sistemele cu dispozitive care utilizează numere în cod BCD, este necesară o operaţie de conversie din binar în BCD şi invers.

4.1. Conversia din binar în BCD
Regula de conversie este următoarea: se deplasează numărul binar spre stânga, începând cu bitul cel mai semnificativ. Înainte de deplasare se adună 3 la decadele care conţin un număr mai mare decât 4.

Fie N2 = 10101101



NBCD




N2

0000 0000 0000

0000 0000 0001

0000 0000 0010

0000 0000 0101

0011




+

10101101

0101101


101101

01101


0000 0000 1000

0000 0001 0000

0000 0010 0001

0000 0100 0011

0000 1000 0110

0011 0011





+


01101

1101


101

01

1



0000 1011 1001

0001 0111 0011





1

Rezultatul este NBCD = 173


4.2. Conversia din BCD în binar
Regula de conversie este următoarea: se deplasează numărul BCD spre dreapta, cu câte o poziţie, începând cu bitul cel mai puţin semnificativ. După deplasare se scade 3 din acele decade care conţin un număr mai mare sau egal cu 8.
Fie NBCD = 173

NBCD




N2

1 0111 0011

1011 1001

0011 0011


-

1


1000 0110

100 0011


10 0001

1 0000


1000

0011




-


1

01

101



1101

01101


0101

010


01

0






01101

101101


0101101

10101101


010101101

Rezultatul este N2 = 101011012 = 17310



5. Reprezentarea numerelor reale
Numerele care intervin în calcule sunt numere nu neapărat întregi, unele sunt foarte mari, altele foarte mici, şi eventual cu multe cifre semnificative. De aceea este necesară o reprezentare a lor în care să se facă distincţie între ordinul de mărime şi precizie (numărul de cifre semnificative).

În notaţia ştiinţifică, un număr este reprezentat astfel: N = M * 10E, unde E este exponentul, un număr întreg pozitiv sau negativ, ce determină ordinul de mărime al numărului, iar M este mantisa, un număr fracţionar, ce determină precizia numărului.

Echivalentul în calculator al acestei notaţii este formatul cu virgulă mobilă, folosit pentru reprezentarea numerelor reale din matematică.

Nu există o corespondenţă biunivocă între numerele reale şi numerele în virgulă mobilă. Astfel, numerele 0,998*109 şi 0,999*109 sunt consecutive în formatul în virgulă mobilă, dar în realitate între ele există o infinitate de numere reale. Cele mai importante diferenţe între numerele reale din matematică şi numerele reprezentate în virgulă mobilă sunt domeniul finit şi mulţimea discretă de valori. Domeniul finit şi discret este determinat de capacitatea fizică limitată a memoriei calculatorului.

Numerele se reprezintă în formatul cu virgulă mobilă prin bitul de semn al numărului, exponent şi mantisă:

n-1 0


S

Exponent

Mantisă

e biţi m biţi
În continuare vom folosi următoarele notaţii:

b – baza de reprezentare a numărului;

bm – baza de reprezentare a mantisei;

e – numărul de biţi pe care se reprezintă exponentul;

m – numărul de cifre ale mantisei;

p – numărul de cifre ale părţii fracţionare a mantisei.

De remarcat faptul că informaţia care nu se modifică nu se reprezintă. Astfel avem baza de numeraţie şi virgula, a cărei poziţie a fost stabilită prin convenţie (de exemplu, în stânga bitului cel mai semnificativ al mantisei, adică m = p).

Mantisa se reprezintă, de regulă, în valoare absolută (prin mărime), baza de reprezentare bm fiind 2, 4, 8 sau 16. Corespunzător, mantisa este o succesiune de cifre în baza 2, 4, 8 sau 16, fiecare cifră fiind reprezentată în memoria calculatorului pe 1, 2, 3 şi respectiv 4 biţi. Condiţia de normalizare, care asigură unicitatea reprezentării numărului real în calculator, stabileşte numărul de cifre ale părţii fracţionare a mantisei. Considerând mantisa subunitară, având prima cifră după virgulă semnificativă, vom avea următoarea condiţie de normalizare:

0,1bm <= mantisa < 1.

Dacă bm este 2, bitul cel mai semnificativ al mantisei este întotdeauna 1. Acest bit, în general, nu se reprezintă în memoria calculatorului (se numeşte bit ascuns), efectul fiind acela de a dubla numărul de mantise distincte ce se pot reprezenta.



Observaţie: Tehnica bitului ascuns se referă doar la reprezentarea numerelor în memoria calculatorului, nu şi la operaţiile efectuate de unitatea aritmetico-logică.

Pentru a creşte precizia reprezentării, trebuie mărit numărul de cifre ale mantisei. De regulă, acest număr se dublează, de unde rezultă şi denumirea de reprezentare în dublă precizie. Numărul total de mantise ce se pot reprezenta este:

Nmantise = (b – 1) * bm-1.

Pentru reprezentarea exponentului pe e biţi, care este întotdeauna un număr întreg pozitiv sau negativ, se utilizează, în general, un cod în exces (2e-1). Avantajul este acela de a lucra numai cu numere întregi fără semn, deci operaţiile sunt mai simple. De regulă, e = 7 sau 8 biţi.

Prin reprezentarea în cod exces 2e-1, domeniul de valori al exponentului D = [-(2e-1-1), (2e-1-1)] se transformă în D’ = [1, 2e – 1]. Această convenţie se mai numeşte şi notaţie polarizată, polarizarea fiind numărul care trebuie scăzut din reprezentarea normală, fără semn, pentru a se obţine valoarea reală a exponentului.

Valoarea 0 a exponentului în cod exces este rezervată pentru reprezentarea numărului 0.

Pentru a mări domeniul de reprezentare, se alege baza numărului 4, 8 sau 16. Baza numărului (b) şi baza mantisei (bm) sunt, de regulă, egale.
Exemple de formate de reprezentare în virgulă mobilă sunt formatul DEC, formatul IBM şi standardul IEEE. În cazul standardului IEEE, baza de reprezentare este b = 2. În simplă precizie, un număr se reprezintă pe 32 de biţi. Exponentul se reprezintă pe e = 8 biţi, în cod exces 127. Valoarea 255 a exponentului în cod exces are semnificaţia de ±∞, după cum bitul de semn este 0 sau 1. Mantisa are m = 24 de biţi, din care p = 23 de biţi pentru partea fracţionară. Mantisa se reprezintă în valoare absolută, folosind tehnica bitului ascuns. Condiţia de normalizare a mantisei este:

1,000…002 <= mantisă <=1,111…112

Deoarece partea întreagă a mantisei este întotdeauna 1, aceasta nu se mai reprezintă în calculator. Se vor reprezenta doar cifrele de la dreapta virgulei, în total 23 de biţi. Precizia reprezentării este de 6 cifre zecimale.

31 30 23 22 0



S

Exponent + 127

Mantisa normalizată

În dublă precizie, un număr se reprezintă pe 64 de biţi, cu m = 53 de biţi, p = 52 de biţi, e = 11 biţi, iar exponentul este în cod exces 1023 (210-1). Se poate observa că domeniul de reprezentare este mult mai mare decât în simplă precizie, iar precizia a crescut la 15 cifre zecimale exacte.

31 30 20 19 0


S

Exponent + 1023

Mantisa

31 0


Mantisă


5.1. Operaţii cu numere reprezentate în virgulă mobilă
În cadrul acestui paragraf se vor considera numerele reale reprezentate în virgulă mobilă în formatul standard IEEE, simplă precizie.
5.1.1. Adunarea numerelor în virgulă mobilă
La adunarea a două numere reprezentate în virgulă mobilă, A+B=C, se parcurg următoarele etape:

a) Se compară exponenţii celor doi operanzi şi, în cazul în care diferă, se va deplasa mantisa operandului mai mic spre dreapta, cu un număr de poziţii egal cu diferenţa exponenţilor. Dacă această diferenţă este mai mare decât numărul de biţi pe care se reprezintă mantisa, rezultatul operaţiei de adunare este mai mare în modul.

b) Se adună mantisele conform regulilor de adunare în virgulă fixă.

c) Dacă la pasul b), a avut loc adunarea efectivă a modulelor mantiselor, iar rezultatul generează depăşire, Mc se deplasează cu o poziţie spre dreapta şi Ec se incrementează. Dacă Ec are valoare maximă şi nu se poate incrementa, atunci se poziţionează indicatorul de depăşire superioară (eof – exponent overflow).

Dacă la pasul b) a avut loc scăderea efectivă a modulelor mantiselor, se vor avea în vedere două situaţii:


  • mantisa rezultatului este 0, caz în care se va face 0 întreg rezultatul (semn şi exponent)

  • mantisa rezultatului este nenormalizată: normalizarea se va realiza prin deplasarea succesivă cu câte o poziţie spre stânga a mantisei, cu decrementarea exponentului.

Dacă la un moment dat exponentul a ajuns la valoarea minimă şi nu se mai poate decrementa, se poziţionează indicatorul de depăşire inferioară (euf – exponent underflow).

Exemplu: Să se adune în virgulă mobilă numerele 3,78 şi 0,43.

În primul rând vom transforma cele două numere în binar, în formatul virgulă mobilă standard. Dacă este necesar, se va face normalizarea şi egalizarea exponenţilor.

3,7810 = 11,11000112 = 1,11100011 * 21

0,4310 = 0,011011102 = 1,101110 * 2-2 = 0,001101110 * 21

1,11100011+



0,00110111

10,00011010

Deci rezultatul adunării este 10,00011010 * 21. Prin normalizarea mantisei se obţine:

1,00001101 * 22.

Pentru reprezentarea rezultatului în formatul standard IEEE 754 simplă precizie va trebui să realizăm polarizarea exponentului (adunarea lui cu 127).


0

10000001

00001101000000000000000



5.1.2. Înmulţirea numerelor în virgulă mobilă
Iniţial se testează dacă este nul cel puţin unul dintre operanzi, caz în care rezultatul înmulţirii este, de asemenea, nul. Operaţia de înmulţire în virgulă mobilă constă în adunarea exponenţilor şi înmulţirea mantiselor.

La adunarea exponenţilor este posibil să apară depăşire superioară (prin înmulţirea a două numere foarte mari în modul) sau depăşire inferioară (prin înmulţirea a două numere foarte mici în modul). În aceste cazuri se vor poziţiona în mod corespunzător indicatorii de depăşire superioară (eof) sau depăşire inferioară (euf).

Dacă la înmulţirea mantiselor rezultatul nu este normalizat, în cazul în care exponentul Ec nu este minim, se va face o deplasare a mantisei Mc cu o poziţie spre stânga, cu decrementarea exponentului.

La operaţia de refacere a exponentului Ec, se ţine cont că prin adunarea exponenţilor s-au adunat două deplasamente (2nr_biţi_exponent-1-1), deci se va scădea din exponentul rezultatului obţinut un deplasament.


Exemplu: Să se înmulţească în virgulă mobilă numerele 8,36 şi 2,74.

În primul rând vom transforma cele două numere în binar, în formatul virgulă mobilă standard. Dacă este necesar, se va face normalizarea şi egalizarea exponenţilor.

8,3610 = 1000,01012 = 1,0000101 * 23

2,7410 = 10,1011112 = 1,0101111 * 21

1,0000101*

1,0101111

10000101


10000101

10000101


10000101

00000000


10000101

00000000


10000101 .

1,01101011101011

Deci rezultatul final al înmulţirii este 1,01101011101011 * 24.

Pentru reprezentarea rezultatului în formatul standard IEEE 754 simplă precizie va trebui să realizăm polarizarea exponentului (adunarea lui cu 127):



0

10000011

01101011101011000000000

Yüklə 138,44 Kb.

Dostları ilə paylaş:




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin