Creeaza.com - informatii profesionale despre


Simplitatea lucrurilor complicate - Referate profesionale unice
Acasa » scoala » informatica » calculatoare
Reprezentarea numerelor in calculator

Reprezentarea numerelor in calculator


Reprezentarea numerelor in calculator

1.1 Clasificarea informatiei

Informatia in calculator este organizata in cuvinte(words). Cuvantul este unitatea de informatie care are lungime fixa. El admite n cifre binare sau biti, unde n este primar determinat din consi­derente ale costului hard. In general este un multiplu de byte.

Clasificarea informatiei:

Information



Instructions

Data­

Numbers

Fixed Point

Binary

Decimal

Floating Point

Binary

Decimal

Non numerical data

ASCII(American Standard Code for Information Interchange)

1.2 Formate pentru numere

Pentru selectarea unei reprezentari de numar care sa fie utilizata in calculator trebuie sa se tina cont de urmatoarele :

tipul numerelor de reprezentat;

domeniul valoric care trebuie acoperit de reprezentare;

precizia numerelor, strict legata de acuratetea maxima a reprezentarii;

costul hardware-ului necesar memorarii numerelor;

Exista doua formate de reprezentare a numerelor:

formate de virgula mobila(flotanta);

formate de vigula fixa;

Formatele de virgula fixa au un domeniu mai restrans, dar si costul circuisticii hardware este mai mic.

1.2.1 Reprezentarea numerelor in virgula fixa

Este dedusa in mod direct din forma zecimala ordinara a numerelor, in conformitate cu care numerele prezinta o virgula zecimala, la partea stanga a acesteia corespunzand partea intreaga a numarului, iar la partea dreapta corespunde partea zecimala. Fiecare pozitie are asociata o pondere, fapt pentru care se spune ca numerele sunt scrise intr-o notatie ponderata: "notatie po­­­­zitionala".

r- baza a sistemului de numeratie;

parte intreaga:

ci< r

parte zecimala:

1.2.1.1 Numere binare

Pentru o reprezentare uniforma a numerelor binare cu semn, din cei n biti considerati disponibili, unul este sacrificat pentru semn, si prin conventie este bitul situat in partea stanga (bitul cel mai semnificativ). Tot prin conventie se atribuie "0" pentru semnul "+" si "1" pentru semnul "­-".

Bitii pot fi numerotati de la dreapta la stanga (cum se intampla la SPARC), caz in care se numeste reprezentare Little Endian, sau de la stanga la dreapta (cum se intampla la fami­lia INTEL), caz in care se numeste reprezentare Big Endian.

Cel doua moduri de numerotare se vor reprezenta mai jos:

. . .

Little Endian

.

Big Endian

Se face o distinctie neta intre numere intregi, pe de o parte, si numere fractionare pe de alta parte. In mod clar virgula nu revendica in acest caz o pozitie binara suplimentara,­ ci este implicita: la clasa numerelor intregi este admisa la dreapta pozitiei cea mai putin semnificativa, iar la cele fractionare e implicit situata intre primii doi biti, cei mai semnifi­cativi biti din stanga.

..

binary point la numere intregi

..

binary point la numere fractionare

Exista 3 reprezentari fundamentale ale numerelor binare in virgula fixa:

a) Sign-magnitude (semn-marime)


Caracteristicile reprezentarii in semn-marime sunt:

In ceea ce priveste domeniul valoric:

pentru numerele intregi avem gama valorica:

pentru numere fractionare gama valorica este:

In ceea ce priveste precizia numerelor raportata la reprezentarea zecimala lucrurile se pre­zinta astfel:

In reprezentarea semn-marime operatiile de inmultire si impartire sunt simplu de implementat, dar cele mai frecvente operatii, care sunt adunarea si scaderea, intampina di­ficultati in traducerea in circuitele masinii de calcul. Facem apel la un principiu fundamen­tal al proiectarii calculatoarelor care este make the common case fast (favorizeaza cazul mai frecvent in detrimentul cazului mai putin frecvent), principiu enuntat de Amdahl.

In acest caz acest principiu nu este rescpectat. Faptul pentru care adunarea si scaderea sunt dificil de implementat in calculator rezulta din urmatoarele exemple foarte simple:

+3 = 0011 +1= 0001

+(-3)= 1011 +(-6)= 1110

---- ----

1110 =(-6) 1111 =(-7)

Cand efectuam operatia de adunare intre numere care difera ca semn trebuie sa se tina cont de semn la implementarea operatiei de adunare, ori aceasta chestiune complica circu­­tele si reprezinta o scadere a reprezentarii semn‑marime.

Pentru cifra "0" a carei testare in calculator se efectueaza foarte frecvent avem doua repre­zentari:

b) One's complement (complement de 1)

In conformitate cu aceasta reprezentare fiecare cifra binara este substituita prin valoarea ei complementara, adica "0" este substituit prin "1" si invers. Fata de cealalta reprezentare numerele pozitive au aceiasi reprezentare, dar difera doar reprezentarea numerelor negative.

Complementul de 1 nu mai are o notatie pozitionala. Si in cazul complementului de 1 exista doua dezavantaje:

Si in acest caz trebuie sa se tina cont de semn pentru ca intr‑un fel se aduna doua numere negative, in alt fel se aduna un numar pozitiv si unul negativ si in alt fel se aduna doua numere pozitive. In primele doua situatii mentionate se apeleaza la corectia "end-around carry".

-2 = 1101 + 7 = 0111 +

-4 = 1011 -3 = 1100

----- -----

11000 + 10011 +

1 end-around carry 1

----- -----

1001 = -6 0100 = 4

La ambele exemple apare un transport (carry) la bitul de semn reprezentat prin acel "1" (in plus) din fata rezultatului, "1" care va fi adunat la rezultat pentru efectuarea corectiei "end-around carry".

"0" are si in acest caz doua reprezentari:

c) Two's complement (complement de 2)

La fel ca la complementul de 1 numerele pozitive raman la fel, dar difera cele negative si anume obtinerea complementului de 2 se face astfel: se complementeaza de 1 numarul dupa care la acesta se mai adauga o unitate binara.

numarul in semn‑marime

complementul de 1

complementul de 2

(modulo 2) la numere fractionare

(modulo ) la numere intregi

Nu se ia in considerare transportul (carry) ce apare la bitul de semn.

Pentru reprezentarea numerelor avem urmatoarele caracteristici:

toate reprezentarile au ca bit de semn;

ambele reprezentari complementare pentru numere negative nu au corespondent intr‑o notatie pozitionala;

in codurile complementare operatia de scadere se realizeaza prin adunarea complementului;

in codurile complementare, exceptand cazul "end‑around carry", bitul de semn nu re­vendica o tratare speciala. El poate fi tratat ca si un bit de numar(biti ordinari).

operatiile de inmultire si impartire sunt mai dificil de efectuat in codurile comple­mentare fata de codul semn‑marime;

apare anomalia complementului de 2 din cauza lui -8:

overflow-underflow (depasire in sus-depasire in jos): la operatia de adunare a doua numere cu semn se spune ca apare depasire in sus/ jos atunci cand semnul re­zultatului difera de cel (acelasi) al numerelor. Situatia aceasta e o conditie de ex­ceptie in calculator, care in mod uzual duce la o deviere ("trap") a calculelor, devi­ere care prin program trebuie sa tatoneze daca situatia este normala sau nu.

Fara a pierde din generalitate sa consideram numerele reprezentate pe n biti:

(sumator complet)

Vom prezenta ecuatia fundamentala de a obtine suma la un sumator complet(full adder):

Ecuatia fundamentala care acopera un sumator complet este urmatoarea:

unde este carry-ul(transportul) din rangul curent, iar este carry-ul din rangul anterior.

- daca s-a obtinut depasire atunci aceasta variabila este pusa pe 1.

Testarea de overflow/underflow se testeaza cu relatia:

Eroarea de rotunjire, care se manifesta in urmatoarea situatie: admitem ca avem de inmultit doua numere reprezentate pe cate n biti fiecare, rezultatul obtinandu-se pe 2n biti . Dar daca de dragul reprezentari numerelor se va reprezenta rezultatul pe n biti atunci se renunta la cei mai putin semnifcativi n biti. Renuntarea fara inter­ven­tie la acesti mai putin semnificativi n biti se numeste trunchiere. Uneori se apeleaza la operatia suplimentara de rotunji­re (rounding) care face ca eroarea de rotujire (round off error) sa fie mai putin importanta pentru rezultat ca eroarea de trun­chere. De exemplu in sistemul zecimal dorim ca numarul 0,346712 sa il rotunjim la 3 cifre zecimale. Daca rezultatul se truncheaza atunci vom obtine 0,346.

r-baza sistemului de numeratie;

j-ponderea corespunzatoare celei mai putin semnificative cifre a rezultatului trunchiat; Operatia suplimentara consta in adaugarea lui dupa care se apeleaza la trunchere:

Pentru a surmonta problema erorilor de trunchiere/rotunjire, uneori, pe parcursul calcu­lelor se apeleaza la efectuarea operatiilor in asa numita precizie multipla, cu corespunza­toarea investitie in circuite. In precizie multipla anteriorul rezultat se poate folosi un cuvant corespunzator majorat.

1.2.1.2 Numere zecimale

Exista multe aplicatii in care operatia dominanta reprezinta intrarea si iesirea de date, ori este cunoscut ca in lumea exterioara operam in sistemul zecimal iar in lumea calculatoa­relor operam in sistemul binar. Operatia implica multe conversii zecimal-binare respectiv binar-zecimale. Aceste reprezentari implica multe calcule consumatoare de timp deci solu­tiile sunt nesatisfacatoare.

Accelerarea operatiei de conversie se obtine pentru niste reprezentari aparte a numerelor zecimale si una dintre ele se caracterizeaza prin faptul ca fiecare cifra zecimala este con­ver­­tita in mod separat. Un astfel de cod poarta denumirea de cod BCD (binary-coded- decimal), care este caracterizat prin faptul ca fiecare cifra binara este substituita printr‑un cvartet binar.

, i1

Se obtine un cod ponderat pentru numere zecimale caracterizat prin faptul ca fiecare cifra binara are asociata ponderea .

Conversia este foarte simpla, dar ea are dezavantajul ca operatia cea mai frec­venta care este adunarea intampina dificultatea constituita de "corectia de 6".

La operatia de adunare, care se efectueaza cifra zecimala cu cifra zecimala sau cvartet bi­nar cu cvartet binar, fie se obtine carry din cifra cea mai semnificativa a cvartetului fie se obtine echivalentul binar corespunzator valorilor zecimale 10,11,12,13,14,15. Se aplica "corectia de 6" constand din adunarea echivalentului binar al cifrei zecimale 6 la cvartetul rezultatului.

Un alt cod este codul zecimal "exces de 3". Adunarea numerelor in acest codul se efe­ctu­eaza fara nici un fel de interventie de tipul "corectiei de 6" prin circuitele care realizeaza aceasta operatie asupra numerelor binare. Regula de obtinere a rezultatului in cod exces de 3 este:

daca in urma efectuarii operatiei de adunare a doi cvarteti binari nu rezulta trans­port atunci se obtine rezultatul corect prin scaderea valorii 3(a echivalentului binar al cifrei 3);

daca la adunarea a doi cvarteti binari se obtine transport atunci rezultatul corect se obtine prin adunarea lui 3.

Prin eroare se schimba numarul de biti de "1" corespunzatori codificarii cifrei zecimale iar eroarea poate fi detectata imediat. Codul 2 din 5 este codul de eroare, el revendicand, pentru atributul suplimentar al detectarii erorilor, investitia suplimentara cu un bit. Relativ la codificarile zecimale putem spune ca:

ele revendica un numar mai mare de biti. De exemplu daca avem un numar cu n biti lungime prestabilita atunci nu mai pot fi codificate in binar numere ci , unde valoarea 0,83n se obtine din rationamentul:

Capacitatea de reprezentare a numarului pe n biti este:

in binar

numere

in BCD

numere

la circuitele care lucreaza cu aceste numere operatiile fundamentale de adunare sunt mai complicate datorita faptului ca transportului posibil intre bitii adiacenti nu ii corespunde o pondere determinata fixa, ci ea difera: daca e intracvartet sau intercvartet.

1.2.2 Reprezentarea numerelor in virgula mobila

Exista multe aplicatii, cu precadere in domeniul calculelor stiintifice, care necesita acope­rirea unui domeniu valoric mare, care in general nu poate fi acoperit prin reprezentarea in virgula fixa. In aceste cazuri se apeleaza la cel de‑al doi‑lea tip de reprezentare, care face apel la asa numita notatie stiintifica(nu este o notatie pozitionala), in conformitate cu care un numar este reprezentat prin 3 numere in forma:

unde E-exponent, B-baza, M-mantisa.

Mantisa M este reprezentata in semn‑marime sau in complement de 2, iar exponentul E este reprezentat in semn‑marime sau in cod exces de o valoare. Baza B este uzual 2 sau o putere a lui 2 si foarte rar este 10. Se spune despre baza ca este "built-into-circuit" ("sapata in hardware") pentru ca ea nu apare in mod explicit.

Domeniul valoric al unui numar reprezentat in virgula flotanta depinde in principal de mantisa, dar si de baza. Intr-un numar de n biti dat pot fi reprezentate doar

numere, si cu cat baza este mai mare cu atat gama valorica este mai mare dar valorile sunt mai rare in intervalul dat.

Precizia depinde de mantisa si in acesta reprezentare avem posibilitatea de a reprezenta nu­­mere reale. Reprezentarea in virgula flotanta se confrunta cu 2 probleme:

Problema mantisei, in conformitate cu care un numar pot sa il reprezint in mod re­­dundant:

In vederea inceperii unor operatii in virgula flotanta si in vederea obtinerii rezultatelor in virgula flotanta se apeleaza la o forma normala de reprezentare a numerelor sau altfel spus se apeleaza la operatia de normalizare a numerelor astfel:

o       daca numarul de virgula flotanta este reprezentat in semn‑marime atunci se considera un numar normalizat daca prima cifra binara normala succe­siva virgulei este "1" si nu "0", adica se elimina zero‑urile nesemnificative (leading 0's);

o       daca numarul de virgula flotanta este reprezentat in complement de 2 atunci se spune ca este normalizat daca (bitul de semn) si (bitul cel mai semnificativ al mantisei) difera valoric;

o       operatia de normalizare implica deplasari ale reprezentarii(ale vigulei) la dreapta, cu incre­mentarea exponentului, si la stanga, cu decrementarea exponentului;

o       prin normalizare mantisa obtine valori in campul restrans:

Problema exponentului, care este legata de problema lui 0.

Datorita unei erori de rotunjire sau alta eroare mantisa in loc sa fie 0 este un numar foarte mic si daca exponentul are o valoare semnificativa atunci in ansamblu numa­rul ar putea fi mult diferit de 0. Pentru a evita aceasta situatie evident ca exponentul ar trebui sa fie cel mai mic numar reprezentabil in campul de exponent. Daca avem k biti alocati expo­nentului din care un bit atribuit semnului atunci rezulta ca in campul de exponent pot fi reprezentate numere: in semn-marime in intervalul , iar in complement de 2 in intervalul , diferenta fiind datorata anomaliei complementului de 2(cu 2 reprezentari pentru "0").

In calculator apare necesitatea testarii lui 0 care este inclusa ca microoperatie in mai multe instructii. Pentru a uniformiza aceste testari pentru numere intregi si pentru numere in virgula flotanta, se cere ca pattern‑ul(modelul) de 0 sa fie constituit dintr-un sir de biti de "0", dar, din precizarea anterioara rezulta ca la exponent ar trebui sa avem k( sau ). Din aceasta cauza exponentul se preconizeaza a fi reprezentat intr-un cod "exces de k", obtinandu-se un "exponent deplasat" alias "caracteristica", obtinut pe seama unui deplasament alias "bias", egal cu k( sau ) . In reprezentarea "exces de k" 0 va fi repre­zentat printr-un sir de zero-uri.

1.2.2.1 Standardul IEEE 754 pentru reprezentarea numerelor in virgula flotanta

La inceputul anilor '80 fabricantii de calculatoare uzitau de modalitati diferite de repre­zentare ale numerelor in virgula flotanta, adica fiecare avea formatul propriu pentru virgu­la flotanta. Difereau numarul de biti pentru reprezentarea numarului si al mantisei, difereau modalitatile de tratare ale underflow-ului si overflow-ului precum si a conditilor speciale(impartirea la 0, extragerea de radacina patratica dintr-un numar negativ, etc.).

Toate acestea faceau ca software-ul elaborat pentru un tip de calculator sa nu poata fi fo­losit pe un alt calculator, adica nu era asigurata portabilitatea programelor.­ Pentru a corecta acesta situatie, la sfarsitul deceniului opt, IEEE a organizat un comitet pentru standardizarea aritmeticii in virgula mobila. Scopul urmarit era acela de a permite schimbul de date in vigula mobila intre calculatoare diferite si de a furniza proiectantiilor hardware un model considerat corect. Rezultatele activitatii au condus la Standardul IEEE 754(IEEE,1985) propus de profesorul de matematica William Kahan,de la Berkley.

Standardul defineste trei formate:precizie simpla(32 biti), precizie dubla(64 biti) si precizie extinsa(80 biti).

unde 0<E<255.

Exponentul are alocati 8 biti in care pot reprezenta pattern-urile binare. In realitate E este un numar cu semn intre -127 si +128, dar folosim reprezentarea in exces de 127. Intru-cat mantisa este reprezentata in semn‑marime si este un numar normalizat(adica prima cifra de "1" apare dupa virgula), stim ca primul bit dupa virgula este "1". S-a trecut la deplasarea spre stanga a numarului normalizat a vechii mantise, iar "1" nu se mai reprezinta explicit in forma, ci este "built‑into‑circuit", deci este implicit, fapt prin care se mareste precizia de reprezentare a numarului in virgula flotanta. Mantisa(significantul) are campul valoric nu ci .

In formatul pe 64 de biti in campul de exponenti avem 11 biti iar restul de 52 de biti sunt pentru mantisa.

unde 0<E<2047.

Acest standard are in plus urmatoarele conventii de reprezentare a unor conditii speciale. Ele sunt urmatoarele:

corespunde asa numitului format "NaN-not a number" si prin acest format se semnaleaza procesorului aparitia pe parcursul calculelor a unor situatii speciale de tipul impartirii la zero sau extragere de rada­cina patratica dintr-un numar negativ,etc. In acest caz intra intr-un "trap" prin care se testeaza modul in care apare aceasta situatie.

E=255(2047) si M=0 corespunde formatului care indica situatia de overflow. arata faptul ca standardul admite aritmetica cu infiniti.

E=0 si M0, acest format corespunde situatiei de denormalizare.

Diferenta dintre numerele nenormalizate si numerele denormalizate este ca la nume­rele nenormalizate se fac operatiile si de abia la sfarsit se normalizeaza. Numere­le denormalizate prezinta un underflow gradual adica un underflow de tipul:

r=10 pe 4 cifre semnificative

Situatia de denomalizare care corespunde acestei codificari speciale ne permite prin pierdere de precizie obtinerea unui underflow gradual in loc de "flush-to-zero underflow".

  • E=0 si M=0 atunciAcest format reprezinta codificarea zero-ului de virgula flotanta.

1.2.2.2 Standardul IBM S/360, S/370

Standardul prezinta trei formate:precizie simpla(32 biti), precizie dubla(64 biti) si precizie extinsa(80 biti).

In campul exponentului se reprezinta numere intregi in exces de 64 si pentru toate versiu­niile e format din 7 biti. Mantisa este un numar fractionar reprezentat in semn-marime si ea este fara bit ascuns("hidden" bit->(0.M)). Baza nu mai este 2 ci 16 si normalizarea se face in termeni hexazecimali. In acest standard nu avem posibilitatea de a reprezenta situatii speciale de tipul NaN-not a number, nici de overflow, nici de denormalizare, iar zero este reprezentat cu zero peste tot. Datorita bazei 16 campul valoric de reprezentare a numere­lor este mult mai mare:

Exemple:

  • Reprezentarea lui N= -999,71875

N = -1111100111,10111

= -1,11110011110111*29

9+127=128+8

N = 1.100|0100|0.111|1001|1110|1110|0|0

C 4 7 9 E E 0 0

N=C479EE00 in IEEE 754

N = -0,00111110011110111x16-3

= 1.100|0011.|0011|1110|0111|1011|1000|.0

C 3 3 E 7 B 8 0

64+3=67 -> E=67

N=C33E7B80 in IBM S/360

In IEEE 754 N=1.10000001.010.0

N = -2129-127 * ( 1.01 ) = -22 * 1,25 = -5





Politica de confidentialitate


creeaza logo.com Copyright © 2024 - Toate drepturile rezervate.
Toate documentele au caracter informativ cu scop educational.