Scrigroup - Documente si articole

Username / Parola inexistente      

Home Documente Upload Resurse Alte limbi doc  

CATEGORII DOCUMENTE





Statistica


ERORI IN METODELE NUMERICE

Statistica

+ Font mai mare | - Font mai mic







DOCUMENTE SIMILARE

Trimite pe Messenger
Elemente de statistica matematica utilizate la prelucrarea datelor experimentale
Teoria selectiei
SCALE DE MASURARE - NEPARAMETRICE, PARAMETRICE
OBSERVAREA DATELOR STATISTICE - METODE DE OBSERVARE STATISTICA
ERORI IN METODELE NUMERICE
Exercitii si probleme propuse - statistica
PLANE PI GENERALIZATE DE CONTROL STATISTIC PRIN SELECTIE
Exercitii si probleme rezolvate - statistica
Teoria estimatiei

ERORI IN METODELE NUMERICE



Introducere

Ne vom ocupa in acest capitol de cateva dintre sursele posibile de erori in metodele numerice.

Consideram important acest subiect ca urmare a doua elemente de care trebuie sa tinem cont in rezolvarea pe calculator a oricarei probleme:

         aritmetica calculatoarelor nu este aceeasi cu aritmetica pe care am studiat-o la scoala; in orice calculator fiecare numar este reprezentat printr-un numar fix de cifre ceea ce, uneori, constituie o limita in calcule;

         daca intr-un calcul de mica amploare, realizat cu o hartie si un creion, unele erori ale metodelor pot fi neglijate, in problemele complexe rezolvate pe un calculator si care implica milioane de operatii, aceste erori devin semnificative.

Exista doua categorii majore de erori in metodele numerice rezolvate pe calculator:

         erorile prin trunchiere si

         erorile prin rotunjire.

Erorile prin trunchiere sunt cauzate de aproximarile pe care le facem in procesul de deducere a formulelor matematice utilizate in metodele numerice. Unul dintre instrumentele importante de analiza a acestora il constituie seriile Taylor.

Erorile prin rotunjire apar datorita numarului limitat de cifre semnificative pe care il avem la dispozitie in calculator pentru reprezentarea oricarui numar real.

Inainte de a face o descriere a acestor erori, sa ne reamintim care sunt posibilitatile de exprimare a erorii intr-un calcul, indiferent de sursa care a generat-o.

Fie x rezultatul aproximativ obtinut intr-un calcul oarecare si x valoarea exacta a solutiei respective. Eroarea absoluta este data de expresia:

0

O alta posibilitate de exprimare a erorii este data de eroarea relativa, definita de relatia :

0

Eroarea relativa este o masura mai utila de evaluare a preciziei deoarece nu este influentata de ordinul de marime al numerelor.

2. Erori prin trunchiere

In analiza erorilor din metodele numerice, o importanta deosebita o au polinoamele Taylor care sunt date de urmatoarea teorema :

Teorema lui Taylor

Sa consideram functia f Cn+1[a,b]. Fie x0 [a,b]. Pentru orice x [a,b], exista un numar ξ(x) cuprins intre x0 si x pentru care

()

unde

0

si

0

Pn(x) poarta denumirea de polinomul Taylor de grad n al functiei f dezvoltata in vecinatatea valorii x0 iar Rn(x) se numeste rest sau eroarea prin trunchiere asociata polinomului Pn(x). Seriile infinite se obtin pentru n -> ∞ si poarta denumirea de serii Taylor ale functiei f dezvoltate in vecinatatea valorii x0.

In cazul in care x0 = 0, polinomul Taylor se numeste polinom Maclaurin iar seriile Taylor, serii Maclaurin.

Termenul de eroare prin trunchiere se refera, in general, la eroarea generata prin considerarea unui numar finit de termeni in aproximarea sumei unei serii infinite, aproximare des utilizata in metodele numerice.

De exemplu, dezvoltarile in serie Taylor pentru functiile ex, sin(x), cos(x), in vecinatatea punctului x0 = 1, sunt :

unde h = x-1

Considerand punctul x0 = 0, obtinem pentru aceleasi functii urmatoarele dezvoltari in serie Maclaurin :

0

---------------------

Exemplul Eroarea prin trunchiere

Fie dezvoltarea in serie Maclaurin :

0

Sa analizam eroarea prin trunchiere in cazul in care vom calcula ln(1,2) pe baza dezvoltarii in serie Taylor in care vom lua in considerare numai primii doi termeni.

Conform teoremei lui Taylor:

0

Eroarea prin trunchiere, pentru x0 = 0, este :

0

unde θ (0,1), iar f(x) = ln(1+x).

Cum derivata de ordinul k a functiei f(x) = ln(1+x) este :

0

deducem

0

Rezulta urmatoarea expresie pentru restul Rn(x) :

1

Pentru n = 2 si x = 0,2 obtinem :

2

Deoarece

3

rezulta aproximarea

ln(1,2) = 0,18,

cu o precizie de doua zecimale.

Concluzia astfel rezultata este confirmata de valoarea exacta :

ln(1,2) = 0,1823215.

---------------------

3. Reprezentarea numerelor in calculator

Consideram necesara cunoasterea catorva notiuni fundamentale in acest domeniu pentru o intelegere ulterioara mai buna a cauzelor care conduc la aparitia erorilor prin rotunjire. Cunoasterea acestor cauze permite, de multe ori, evitarea efectelor nedorite a erorilor prin rotunjire printr-o tehnica corecta de elaborare a algoritmilor.

3. Sisteme de numeratie

Sistemul de numeratie in care lucram zilnic este sistemul zecimal, in baza 10. Din motive tehnologice, calculatoarele electronice utilizeaza pentru reprezentarea interna a numerelor si pentru calcule sistemul de numeratie binar. Analizand limbajele interne ale calculatoarelor vom observa ca sunt utilizate si alte sisteme de numeratie, cum ar fi sistemul octal care are baza 8 si sistemul hexazecimal avand baza 16.

In sistemul binar fiecare cifra utilizata pentru reprezentarea unui numar are valoarea 0 sau 1, in sistemul octal cifrele sunt cuprinse in intervalul 0-7 iar in sistemul hexazecimal fiecare cifra este cuprinsa in intervalul 0-15, cifrele de la 10 la 15 fiind exprimate prin literele A,B,C,D,E si F. Valorile zecimale corespunzatoare cifrelor din sistemul hexazecimal sunt :

Zecimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Hexazecimal 0 1 2 3 4 5 6 7 8 9 A B C D E F

Baza unui sistem de numeratie mai poarta si denumirea de radacina si poate fi specificata printr-un indice inferior. Utilizand scrierea pozitionala, un numar oarecare, cu parte fractionara, poate fi reprezentat intr-un sistem de numeratie cu baza b, in forma :

unde ai, i = -k,,-2,-1,0,1,,n-1, sunt cifre.

De exemplu (101,1101)2, (16C6,92)16

Numarul real din sistemul zecimal corespunzator unui numar exprimat intr-un sistem de numeratie oarecare este dat de urmatoarea relatie polinomiala :

De exemplu, numarului (101,11)2 ii corespunde in sistemul zecimal numarul real 5,75, deoarece :

Prima cifra diferita de zero de la stanga numarului se numeste prima cifra semnificativa.

3.2. Reprezentarea interna a numerelor in calculator



Am aratat anterior ca, din motive tehnologice, majoritatea calculatoarelor utilizeaza reprezentarea interna a numerelor in sistemul binar. Considerand un numar oarecare reprezentat in sistemul binar, cifrele 0 sau 1 poarta denumirea de bit.

Bit este acronimul pentru cifra binara (Binary digIT) si in ceea ce priveste calculatorul este utilizat atunci cand ne referim la un element al memoriei avand pozitia 'deschis' sau 'inchis'.

Byte este un set de opt biti si este considerat ca unitate de referinta.

Exista doua categorii de numere care pot fi utilizate in calculele efectuate pe un calculator : numere intregi si numere in virgula mobila (numere reale).

Ne vom referi in acest capitol numai la modul de reprezentare a numerelor pe un calculator, in limbajul de programare Turbo Pascal.

Numerele Intregi

Fie un intreg exprimat, pozitional, in sistemul binar:

unde ai, i= n, n-1, ,0 sunt cifre binare 0 sau

Intr-un calculator, valoarea maxima a numarului de biti pentru reprezentarea unui numar intreg este limitata. De obicei, se utilizeaza 2 bytes pentru reprezentarea unui intreg (variabile de tip integer). Primul bit din stanga inregistreaza semnul : 0 -> pozitiv si 1 -> negativ. Restul de 15 biti a14, a13,,a1, a0 sunt utilizati pentru reprezentarea cifrelor binare.

Astfel, cel mai mare intreg pozitiv este :

----------------------------------------------

bitul 0| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

----------------------------------------------

Numarul in binar 0| 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

-----------------------------------------------

Valoarea corespunzatoare in zecimal pentru acest numar este

Cel mai mic intreg negativ ce poate fi reprezentat pe 2 bytes este (-32767)10.

Limbajul de programare Turbo Pascal permite, in functie de necesitati, utilizarea urmatoarelor tipuri de date intregi :

+------------------------------------------------------------+

| Tip | Domeniu | Forma de reprezentare |

+-----------+------------------------+-----------------------|

| shortint | -127127 | 8 biti cu semn |

+-----------| | |

| integer | -3276732767 | 16 biti cu semn |

+-----------| | |

| longint |-21474836482147483647| 32 biti cu semn |

+-----------| | |

| byte | 0255 | 8 biti fara semn |

+-----------| | |

| word | 065535 | 16 biti fara semn |

+------------------------------------------------------------+

Numere Reale

Reprezentarea numerelor reale in calculator se face in virgula mobila si in forma binara normalizata. In simpla precizie, se realizeaza pe 6 bytes (48 biti).

Sa consideram un numar binar oarecare, avand parte intreaga si parte fractionara, exprimat in scriere pozitionala, in forma generala :

In forma normalizata numarul este dat de relatia :

De exemplu, numarul binar (101,11) se va scrie in forma normalizata (0,10111) x 23. Numarul real corespunzator in zecimal numarului binar dat este :

In mod asemanator se vor reprezenta in forma normalizata si numerele binare subunitare. De exemplu (0,0001011)2 se va scrie in forma normalizat_ (0,1011) x 2-3.

Revenind la reprezentarea interna a unui numar in virgula mobila (in Turbo Pascal), cei 48 de biti sunt utilizati dupa cum urmeaza : primul bit de la stanga pentru semn, urmatorii 8 biti pentru exponent si restul de 39 de biti pentru mantisa :

---------------------------------------------------------------

0 1 2 3 4 5 6 7 8 9 10 11 45 46 47

---------------------------------------------------------------

s| e e e e e e e e | m1 m2 m3 m37 m38 m39

---------------------------------------------------------------


8 biti pentru 39 biti pentru mantisa

exponent

1 bit pentru semn

s, e, m1,,m39 sunt cifre binare (0 sau 1).

Pornind de la aceasta reprezentare, un numar zecimal oarecare x, in virgula mobila este exprimat in urmatoarea forma normalizata :

unde am notat cu g exponentul translabil si cu p constanta de translare. Exponentul g este intreg si se reprezinta pe cei 8 biti pentru exponent, ceea ce inseamna ca poate lua orice valoare cuprinsa in intervalul [0,255].

In particular, 0 si 255 sunt valori rezervate. Constanta p are valoarea 128 (in simpla precizie). Exprimand in acest mod exponentul lui 2 din forma normalizata se evita cerinta unui bit suplimentar pentru semnul acestui exponent.

In forma normalizata prima cifra semnificativa este intotdeauna 1, astfel incat numarul efectiv de cifre binare pentru mantisa este 40. Intervalul in care poate lua valori exponentul lui 2 in forma normalizat_ este -127 <= g - p <= +126, de unde

2-127 < 2(g - p) < 2126. Cel mai mic numar care poate fi reprezentat pe o mantis_ de 40 bi_i este (0,1)2 = 0,510 iar cel mai mare este (0,1..11)2 = (1 - 2-40)10.

Obtinem in acest mod cel mai mic numar in virgula mobila care poate fi reprezentat in calculator : 0,5 x 2-127 = 2,938x 10-39, respectiv cel mai mare numar in virgula mobila reprezentabil : (1 - 2-40) 2127 = 1,7014..x 1038.

Deoarece numarul de biti utilizat pentru reprezentarea mantisei si a exponentului este limitat, rezulta o prima concluzie importanta : pe un calculator, in simpla precizie, exista un numar finit de numere reale, in virgula mobila, care pot fi reprezentate exact: 248-

Limbajele de programare ofera posibilitatea utilizarii si altor tipuri de date reale in functie de precizia de calcul solicitata in rezolvarea problemelor ( vezi tabelul 2.).

Tipul variabilei

(in Turbo Pascal)

Dimensiunea, in bytes, alocata in calculator pentru reprezentarea variabilei

Numarul de cifre semnificative exacte rezultat, in zecimal

Domeniul de definitie, in zecimal

real

6

11 - 12

2,9 x 10-39 1,7 x 1038

single

4

7 8

1,5 10-45 3,4 1038

double

8

15 16

5,0 10-324 1,7 10308

extended

10

19 20




3,4 10-4932 1,1 104932

4. Erori prin rotunjire

Am demonstrate, in capitolul anterior, ca exista un numar limitat de numere reale care pot fi reprezentate exact in calculator, altfel spus, numerele reale care pot fi reprezentate exact sunt insirate ca margelele pe axa numerelor reale. De exemplu, daca cel mai mic numar real, diferit de zero, care poate fi reprezentat exact in calculator este 2,938x10-39, rezulta ca numerele reale cuprinse in intervalul (0, 2,9 x 10-39) nu pot fi reprezentate exact (vom analiza mai jos cum sunt, in schimb, aproximate). Aceeasi afirmatie este valabila si pentru orice numar real, negativ, apartinand intervalului (-2,9 x 10-39 , 0).

Cum putem determina intervalul dintre doua numere reale consecutive care pot fi reprezentate exact in calculator ?

Pentru aceasta vom afla mai intai o constanta importanta a oricarui calculator si anume constanta epsilon care reprezinta diferenta dintre numarul 1 si cel mai mic numar care este mai mare decat 1 si care este reprezentabil in calculator, altfel spus, cel mai mic numar real, pozitiv, care adunat la 1 va da in calculator un numar diferit de

Reprezentarea binara in forma normalizata pentru 1, in simpla precizie, este :

(1)10=(0,1000 0000 0000 0000 0000 0000 0000 0000 0000 0000)2 x 21

Cel mai mic numar, mai mare decat 1, care poate fi reprezentat pe mantisa de 40 biti este:

(0,1000 0000 0000 0000 0000 0000 0000 0000 0000 0001)2 x 21

Numarul real zecimal corespunzator acestui numar binar este :

Rezulta astfel, in simpla precizie, urmatoarea valoare pentru constanta epsilon :

ε = 1,81898x 10-12.

In cazul in care nu cunoastem modul de reprezentare interna a numerelor in calculatorul pe care lucram, constanta epsilon poate fi dedusa prin rularea unui program elaborat pe baza urmatorului algoritm:

Algoritm pentru determinarea constantei epsilon a calculatorului

variabile definite: eps, eps1 ;

se va defini tipul variabilelor (real, single, double, extended)

eps = 1;

eps1 = 1;

cat timp eps1 > 0,

begin

eps = eps/2 ;

eps1 = eps*0,98+1 ;

eps1 = eps1-1

end ;

afiseaza Epsilon calculator = eps ;

De exemplu, pentru o reprezentare a variabilelor in simpla precizie (pe 8 bytes):

Epsilon calculator = 1,8189894035 x 10-12

Elaborati un program care sa calculeze constanta epsilon, in dubla precizie (declarati variabilele eps, eps1 : double) si in precizie multipla.

Cunoscand constanta epsilon a calculatorului, putem afla diferenta dintre orice numar real ri, care poate fi reprezentat exact in calculator si urmatorul numar real ri+1 , reprezentabil exact, pe baza relatiei :

ri+1 - ri ≈ epsilon x ri

4. Erori prin rotunjire in reprezentarea interna a numerelor

Principala cauza a erorilor prin rotunjire este generata de reprezentarea numerelor reale in forma binara printr-un numar limitat de biti.

Am aratat anterior ca nici un numar real cuprins intre 1 si 1+epsilon_calculator nu poate fi reprezentat exact in calculator, altfel spus. In acest caz, daca in urma unor calcule obtinem un numar de forma 1+α, unde α (0, ε), acest numar va fi aproximat, prin taiere, cu 1 daca

sau va fi rotunjit la valoarea 1 + ε daca

Acest proces de taiere sau rotunjire este cunoscut in literatura de specialitate si sub denumirea de rotunjire simetrica.

Sa generalizam. Fie intervalul dintre doua numere reale consecutive cu reprezentare exacta in calculator (ri, ri+1). Orice numar real de forma ri+ α, cuprins in acest interval

(α (0, ri+1-ri)) va fi aproximat prin taiere la valoarea ri daca

sau va fi rotunjit la valoarea ri+1 daca

De exemplu, numarul 0,143 nu poate fi reprezentat exact in calculator si este aproximat, prin taiere, la valoarea 0,14299999986; numarul 0,1431 nu poate fi reprezentat exact si este aproximat prin rotunjire la valoarea 0,14310000025

Eroarea care se face la reprezentarea unui numar oarecare in calculator este aproximativ egala cu ε x r/2 daca numarul este aproximat prin rotunjire si ε x r daca este aproximat prin taiere.

4.2. Efecte si cauze ale erorilor prin rotunjire

Unul dintre efectele erorilor prin rotunjire se manifesta la adunarea si scaderea numerelor. In general scaderea si adunarea numerelor in virgula mobila, normalizate, ca urmare a modului in care se efectueaza, necesita reprezentarea rezultatului cu un numar mai mare de cifre semnificative decat al numerelor insumate pentru a obtine o precizie satisfacatoare.

Sa adunam numerele (1)10 si (0,0000001)10. Reprezentarea binara in forma normalizata a acestor numere este:

(1)10=(0,1000 0000 0000 0000 0000 0000 0000 0000 0000 0000)2 x 21

(0,00000001)10=(0,1010 0111 1100 0101 1010 1100 0110 1001 1100 1011)2 x 2-26

Pentru a aduna aceste doua numere este necesar sa le aducem la acelasi exponent (exponentul mai mare). Aceasta operatie conduce la denormalizarea numarului cu exponent mai mic, altfel spus se deplaseaza mantisa cu 27 de pozitii spre dreapta, aceste pozitii fiind ocupate de cifra 0.

Urmatoarea etapa consta in adunarea mantiselor. Evident ca rezultatul exact necesita o reprezentare pe o mantisa de 67 de biti. Mantisa pe care o avem la dispozitie fiind de numai 40 de biti se vor pierde ultimile 27 de cifre binare semnificative. Rezultatul real al adunarii este :

(0,1000 0000 0000 0000 0000 0000 0001 0100 1111 1000)2 x 21

ceea ce in zecimal inseamna (0,000000010008)10. Daca veti aduna (0,00000001)10 de 10000 de ori la 1, la fiecare adunare se va insuma si o eroare de 8 x 10-12. Rezultatul va fi 1,000100008.

O prima concluzie care se desprinde din acest exemplu este: evitati insumarea numerelor diferite considerabil ca ordin de marime.

In cazul in care aveti o problema in care trebuie sa realizati o suma de mai multi termeni diferiti ca ordin de marime, adunati mai intai termenii de ordin mic.

Sa analizam in continuare efectul erorii prin rotunjire la scaderea numerelor.

Se stie ca derivata unei functii intr-un punct x este definita de relatia :

astfel incat, pentru valori mici ale lui h, putem considera formula de aproximare :

Sa calculam pe baza acestei formule derivata functiei f(x)=cos(x) in punctul x = 1

Tabelul 3. contine rezultatele obtinute pentru diverse valori ale lui h (pentru calcule efectuate in simpla precizie).

Tabelul 3.

--------------------------------------------------------------

h cos'(1)=(cos(1+h)-cos(1))/h eroarea

--------------------------------------------------------------

10-1 -8,670618444 10-1 -2,559085962 10-2

--------------------------------------------------------------

10-2 -8,441584494 10-1 -2,687464682 10-3

--------------------------------------------------------------

10-3 -8,417409962 10-1 -2,700114864 10-4

--------------------------------------------------------------

10-4 -8,414979947 10-1 -2,700996265 10-5

--------------------------------------------------------------

10-5 -8,414736839 10-1 -2,699169272 10-6

--------------------------------------------------------------

10-6 -8,414717740 10-1 -7,892313078 10-7

--------------------------------------------------------------

10-7 -8,414826879 10-1 -1,170316682 10-5

--------------------------------------------------------------

10-8 -8,415554475 10-1 -8,446274296 10-5

--------------------------------------------------------------

10-9 -8,421920938 10-1 -7,211090342 10-4

--------------------------------------------------------------

10-10 -8,458300726 10-1 -4,359087841 10-3

--------------------------------------------------------------

Conform formulei utilizate rezultatele trebuie sa se imbunatateasca pe masura ce h scade. Se observa ca precizia aproximarilor creste pana la h = 10-6, in timp ce incepand cu valori mai mici decat 10-6 precizia incepe sa scada. In acest caz eroarea prin rotunjire influenteaza nefavorabil rezultatul scaderii a doua numere aproximativ egale.

Pentru o mai buna intelegere sa consideram doua numere reale x si y avand urmatoarea reprezentare binara in forma normalizata pe o mantisa de 40 de biti :



Rezultatul diferentei x - y este

unde

Ce efect are asupra rezultatului modul in care s-a efectuat scaderea ?

Mai intai trebuie sa tinem cont de faptul ca, intr-un calculator, un numar foarte mic de numere reale zecimale admit o reprezentare exacta in binar cu un numar finit de cifre binare. La scaderea a doua numere binare in virgula mobila in forma normalizata si avand valori apropiate, mantisa rezultatului se deplaseaza spre stanga cu un numar de pozitii egal cu numarul cifrelor semnificative comune celor doua numere care se scad iar exponentul se va micsora cu acest numar.

In partea drepta a mantisei va rezulta un numar de cifre binare 0 egal cu numarul pozitiilor cu care s-a deplasat mantisa spre stanga. In situatia in care cele doua numere reale care se scad sunt aproximativ egale, se va pierde un numar de cifre binare semnificative egal cu numarul pozitiilor cu care s-a deplasat mantisa spre dreapta.

Astfel, cu cat numerele care se scad sunt mai apropiate, numarul de cifre semnificative care se va pierde este mai mare.

Mai apar erori prin rotunjire si la scaderea numerelor mult diferite ca ordin de marime. Rezulta in acest fel o a doua regula de care trebuie sa se tina cont in elaborarea unui algoritm: evitati scaderea numerelor aproximativ egale sau mult diferite ca ordin de marime.

5. Concluzii

O analiza superficiala a erorilor prin rotunjire ne poate duce la concluzia gresita ca efectul acestora este neglijabil. In realitate, intr-o problema complexa care implica milioane de calcule, erorile prin rotunjire se pot propaga, afectand considerabil rezultatul final.

Acest efect poate fi evitat prin elaborarea unor algoritmi stabili numeric. Un algoritm este stabil numeric daca modificari mici ale datelor de intrare vor genera modificari mici ale rezultatului final.

Din pacate, nu exista o regula unica care sa ne permita elaborarea unor algoritmi stabili. Cateva strategii posibil de aplicat astfel incat sa se reduca efectul erorilor prin rotunjire sunt :

Efectuarea calculelor in dubla sau multipla precizie. Dezavantajul acestei alegeri consta in cresterea considerabila a timpului de calcul si in faptul ca erorile prin rotunjire nu sunt eliminate ci numai diminuate.

2. Metoda gruparii. De exemplu am vazut in capitolul 4.2. ca daca adunam de 10000 de ori 0,00000001 la 1 vom obtine 1,00100008. Daca veti efectua calculele adunand de cate o suta de ori 10-8, rezultatul adunandu-l de o suta de ori la 1, veti obtine rezultatul corect - 1,00

3. Rescrierea ecuatiilor pe baza carora se elaboreaza algoritmul.

O analiza mai detaliata a instabilitatilor numerice si a altor posibitati de evitare a erorilor prin rotunjire se gaseste in [ 5 ].

PROGRAMUL CONVERSIA DIN ZECIMAL IN BINAR

I. Explica_ii

Acest program face conversia din zecimal in reprezentarea binar_ in forma normalizat_ in virgul_ mobil_ pe o mantis_ de 24 de bi_i (programul poate fi u_or modificat _i pentru o mantis_ de 40 de bi_i). Aceast_ conversie poate fi exprimat_ sub forma:

0 (A)

unde x este num_rul zecimal introdus, m1,,m40 sunt cifre binare 0 sau 1 iar exp este exponentul lui 2 in zecimal.

Datele se introduc interactiv.

II. Listing

program zecimal_binar;

var

a:array[0..255] of integer;

i,k,l,m_exp,n:integer;

putere2,s,zecimal,y:real;

ch:char;

function log(x:real):real;

begin

log:=ln(x)/ln(10);

end;

function putere(baza,n:real):real;

begin

putere:=exp(n*ln(baza));

end;

begin

writeln ;

writeln(' Program de conversie Zecimal‑Binar ');

writeln;

repeat

write ('Introduceti valoarea in baza zece:');

readln (zecimal);

l:=0;

k:=1;

i:=trunc(log(zecimal)/log(2.0))+3;

repeat

i:=i‑1;

if (i<‑200) then exit;

putere2:=putere(2.0,i‑1);

if zecimal>=putere2 then

begin

a[k]:=1;

zecimal:=zecimal‑putere2;

if l=0 then

begin

m_exp:=i;

l:=1;

end;

end

else

if k>1 then a[k]:=0;

if l>0 then k:=k+1;

until k>=25;

writeln('‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑');

writeln('Binar');

write(' Mantisa = 0.');

for k:=1 to 24 do

begin

write(a[k]);

if (k mod 4)=0 then

write(' ');

end;

writeln;

writeln(' Exponent= ',m_exp);

writeln('‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑');

write('Continuati? (d/n):');

readln(ch);

until (ch='n') or (ch='N');

end.

EXEMPLE RULARE

Program de conversie Zecimal‑Binar

Introduceti valoarea in baza zece:0.4

‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑

Binar

Mantisa = 0.1100 1100 1100 1100 1100 1100

Exponent= ‑1

‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑

Continuati? (d/n):D

Program de conversie Zecimal‑Binar

Introduceti valoarea in baza zece:55

‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑

Binar

Mantisa = 0.1101 1011 1111 1111 1111 1111

Exponent= 6

‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑

Continuati? (d/n):D

Program de conversie Zecimal‑Binar

Introduceti valoarea in baza zece:0.0003264

‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑

Binar

Mantisa = 0.1010 1011 0010 0000 1010 1010

Exponent= ‑11

‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑

Continuati? (d/n):N

III. Comentarii

Am ales ca exemple de rulare conversia numerelor reale 0,4; 55; 0,0003264. Datele de ie_ire vor fi interpretate conform rela_iei (A).









Politica de confidentialitate

DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 830
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2019 . All rights reserved

Distribuie URL

Adauga cod HTML in site