Numere în virgulă fixă şi în virgulă mobilă

Dacă ecuaţiile sunt trenuri
ce traversează peisajul numeric,
trenul nu opreşte în gara pi.
Richard Preston

La reprezentarea/codificarea numerelor reale se folosesc numere în virgulă fixă şi în virgulă mobilă.

Anterior, m-am referit la codificarea numerelor întregi. Trecând la cazul numerelor reale reamintesc că ele sunt:

  • fie raţionale  (se reprezentă sub formă de raport a două numere întregi (m/n)),
  • fie iraţionale (nu pot fi reprezentate sub formă de raport a două numere întregi).

Exemplele de numere raţionale includ numerele întregi şi fracţiile  de tipul: ½, ¾ etc.

Numerele iraţionale pot fi algebrice şi transcedente.

Numerele algebrice sunt rădăcini ale ecuaţiilor polinomiale cu coeficienţi raţionali. Numerele raţionale sunt şi algebrice.

Numerele care nu sunt soluţii ale ecuaţiilor algebrice cu coeficienţi raţionali sunt numite transcedente. E demonstrat că numerele pi şi e sunt transcedente.

Aşadar, exemplele de numere algebrice includ numerele raţionale, dar şi numere de tipul aqrt(2), sqrt (3). Este număr iraţional algebric şi soluţia ecuaţiei x5-3x+3=0, care nu poate fi reprezentată sub formă de radicali.

Există şi numere reale despre care nu se ştie dacă sunt ori nu iraţionale. Un asemenea număr este pi+e.

Pentru a trece la subiectul codificării numerelor reale trebuie să reamintim că de fapt toate numerele reale se reprezintă în sistemul zecimal poziţional sub formă de consecutivitate de cifre, fiecare având o valoare determinată de poziţia ei (unităţi, zeci, sute etc., precum şi zecimi, sutimi, miimi etc.). Pentru numerele iraţionale partea fracţionară (după virgulă) se reprezintă sub formă de consecutivitate  nemărginită, în care nu există o careva periodicitate. Dar şi numerele raţionale pot să conţină după virgulă o infinitate de cifre, în care există o anumită periodicitate, cum este spre exemplu 1/3=0,(3).

Aşadar, orice număr real pozitiv x se reprezintă în baza b sub forma:

xb=cn-1cn-2…c1co,c-1c-2…c-m

şi are în baza 10 semnificaţia numerică:

xb=x10=x =cn-1*bn-1 + cn-2*bn-2+…+c1*b1+co*b0+c-1*b-1+c-2*b-2+…+c-m*b-m+…

Observăm doar că după virgulă se folosesc un număr nelimitat de cifre (poziţii). Cifra ci de pe poziţia i aparţine alfabetului {0, 1, 2, …, b-1} şi semnifică valoarea numerică zecimală a simbolului de pe poziţia i.

Un număr reprezentat în forma de mai sus îl vom numi număr în virgulă fixă.

Deoarece la calculator se foloseşte un volum finit de memorie pentru reprezentarea numerelor, numerele reprezentate la calculator în virgulă fixă (binary fixed point) vor folosi până la virgulă şi după ea câte un număr finit (şi neschimbat) de cifre, şi vor fi formate  din: semn, parte întreagă si parte fracţionară. De fapt, codurile direct, invers şi complementar, folosite pentru numerele întregi, se aplică în cazul numerelor în virgulă fixă, deoarece virgula este imaginară şi într-o poziţie fixă a fragmentului de memorie folosit. In acest caz sunt fixe atât numărul de poziţii ale părţii întregi, cât şi numărul de poziţii ale părţii fracţionare.

Exemplul 1. Reprezentarea pe 8 biţi a numerelor fracţionare cu 5 poziţii  pentru parte întreagă şi 3 poziţii pentru partea fracţionară.

Dacă se reprezintă numere nenegative, atunci intervalul de valori este [00000,0002; 11111,1112],  echivalent cu [0,0; 31,875].

Daca se reprezintă şi numere pozitive, şi numere negative în cod direct, atunci bitul superior (din stânga) se va folosi pentru semn (0 pentru plus, şi 1 pentru minus), iar intervalul de valori va fi [11111,1112; 01111,1112], echivalent cu [-15,875; 15,875].

Nota bene. Codificarea în virgulă fixă pe n biţi permite să se reprezinte exact 2n numere fracţionare, deoarece numai atâtea coduri există.

Numerele în virgulă mobilă se reprezintă în baza notaţiei exponenţiale (ştiinţifice), numită şi forma standard. În această notaţie numărul se reprezintă sub forma:

m*10k,

unde m este un număr real şi se numeşte semnificant (termenul mantisă se consideră  învechit), iar k – număr întreg şi se numeşte exponent (termenul caracteristică – învechit). Standardul IEEE nu recomandă folosirea termenilor mantisă şi caracteristică, asociaţi tradiţional cu valorile logaritmului.

În notaţia exponenţială poziţia virgulei zecimale poate fi controlată, deoarece poziţia virgulei zecimale poate fi schimbată în funcţie de valoarea exponentului.

Exemplul 2. 14,4=14,3*100=0,143*102=143*10-1=143E-1. Litera E sau e se foloseşte tradiţional la calculator cu semnificaţia de 10.

Notaţia exponenţiala m*bk poate fi aplicată în orice bază b, codificarea exponentului şi a mantisei realizându-se în baza b.

În sistemul binar notaţia exponenţial este m*2k.

La calculator această notaţie se realizează pe o secvenţă de biţi de o anumită lungime n. În această secvenţă se foloseşte un bit S pentru semnul semnificantului. Urmează imediat un bit s pentru semnul exponentului. Urmează biţii E rezervaţi exponentului şi apoi biţii M rezervaţi semnificantului. Ca rezultat numărul în notaţie exponenţială va fi codificat sub forma: SsEM.

Trebuie să remarcăm că la codificarea exponentului poate fi folosit unul dintre codurile: direct, invers sau complementar, dar se aplică şi alte coduri. La codificarea semnificantului se aplică forma normalizată în care 1≤|M|<b, o formă care adesea este confundată cu cea generală, adică exponenţială sau ştiinţifică. În sistemul binar: 1≤|M|<b. De remarcat că numărul 0 nu poate fi notat în notaţia exponenţială. În plus, deoarece în forma zecimală nu întotdeauna calculatorul poate afişa 10k, se folosesc şi forme alternative, cum sunt: Ek şi ek.

În notaţia exponenţială binară normalizată, valoarea absoluta a mantisei aparţine intervalului [1, 2). Aceasta permite să se omită bitul superior (din stânga), care întotdeauna are valoarea 1.

Exemplul 3. La codificare pe 8 biţi bitul superior va fi rezervat semnului semnificantului (mantisei), următorul bit – semnului exponentului, 3 biţi – pentru valoarea absolută a exponentului şi ultimii trei biţi pentru semnificant (mantisă):

_ _ ___ ___

Pentru simplitate vom presupune că pentru exponent se folos
eşte codificarea complementară. Valoarea exponentului va aparţine intervalului [-23, 23-1]=[-8, 7] şi semnifică posibilitatea de a schimba virgula în codul binar cu 8 poziţii spre stânga şi 7 poziţii spre dreapta.

Pentru semnificant (mantisă) vom presupune că se foloseşte forma normalizată în care primul bit este 1 şi este omis. Ca rezultat, valorile semnificantului (mantisei) vor aparţine intervalului:

[-1,1112; 1,1112] = [-1,875; 1,875].

Intervalul de valori va cuprinde [-11 110 000,02; 11 110 000,02] = [-240,0; 240,0].

Numerele cele mai mici în valoare absolută vor aparţine intervalului:

[-0,000000011112; 0,000000011112] = [-15/2048; 15/2048]= [-0.00732422; 0.00732422].

Comparând exemplul 3 (notaţia exponenţială) cu xxemplul 1 (notaţia în virgulă fixă) putem observa lesne că s-a mărit esenţial domeniul de valori reprezentate. Dar, rămâne neschimbat numărul total de coduri pe care le putem folosi: 2n.

În informatică se foloseşte termenul FLOPS (scris și flops sau flop/s), care este un acronim ce provine de la expresia engleză FLoating point Operations Per Second (operații în virgulă mobilă pe secundă). FLOPS măsoară într-un anumit sens performanța (viteza de calcul) a unui calculator. Deoarece FLOPS este un acronim și S-ul din final înseamnă „secundă”, FLOPS este atât formă de singular, cât și de plural.

Există standarde internaţionale pentru aritmetica numerelor în virgulă mobilă. Standardul actual este IEEE 754-2008 (The IEEE Standard for Floating-Point Arithmetic).

Anunțuri

Un comentariu la “Numere în virgulă fixă şi în virgulă mobilă

  1. Pingback: Numere în virgulă fixă şi în virgulă mobilă - Ziarul toateBlogurile.ro

Lasă un răspuns

Completează mai jos detaliile tale sau dă clic pe un icon pentru a te autentifica:

Logo WordPress.com

Comentezi folosind contul tău WordPress.com. Dezautentificare / Schimbă )

Poză Twitter

Comentezi folosind contul tău Twitter. Dezautentificare / Schimbă )

Fotografie Facebook

Comentezi folosind contul tău Facebook. Dezautentificare / Schimbă )

Fotografie Google+

Comentezi folosind contul tău Google+. Dezautentificare / Schimbă )

Conectare la %s