4.3 Virgula mobilă (numere reale)

Schema de codificare pentru numerele cu virgulă mobilă este mai complicată decât pentru virgula fixă. Ideea de bază este aceeași cu cea folosită în notația științifică, unde o mantisă este înmulțită cu zece ridicat la un exponent. De ex. 5,4321 × 106, unde 5,4321 este mantisa și 6 este exponentul. Notarea științifică este excepțională la reprezentarea numerelor foarte mari și foarte mici. De exemplu: 1,2 × 1050, numărul de atomi din pământ, sau 2,6× 10-23, distanța pe care se târăște o broască țestoasă într-o secundă, în comparație cu diametrul galaxiei noastre. Observați că numerele reprezentate în notația științifică sunt normalizate astfel încât să rămână doar o singură cifră nonzero la stânga virgulei zecimale. Acest lucru este realizat prin ajustarea exponentului după cum este necesar.

Reprezentarea virgulei mobile este similară cu notația științifică, cu excepția faptului că totul se desfășoară în baza doi, mai degrabă decât în baza zece. În timp ce se utilizează mai multe formate similare, cea mai comună este ANSI/IEEE Std. 754-1985. Acest standard definește formatul pentru numerele de 32 de biți denumit precizie simplă, precum și pentru numerele de 64 biți numit dublă precizie. Așa cum se arată în figura 4-2, cei 32 de biți utilizați în precizie simplă sunt împărțiți în trei grupe separate: biții 0 până la 22 formează mantisa, biții 23 până la 30 formează exponentul și bitul 31 este bitul de semn. Acești biți formează numărul în virgulă mobilă v, prin următoarea relație:

Ecuația 4-1

Ecuația pentru convertirea unui model de biți într-un număr în virgulă mobilă. Numărul este reprezentat prin ν, S este valoarea bitului de semn, M este valoarea mantisei și E este valoarea exponentului.

Termenul (-1)S înseamnă pur și simplu faptul că bitul de semn S este 0 pentru un număr pozitiv și 1 pentru un număr negativ. Variabila E este numărul între 0 și 255 reprezentat de cei opt biți exponent. Scăderea numărului 127 din acest număr permite termenului exponent să ruleze de la... la... Cu alte cuvinte, exponentul este stocat în offset binary cu o deviere de 127.

Figura 4-2 Format de stocare în virgulă mobilă precizie simplă.

Cei 32 de biți sunt împărțiți în trei părți separate, bitul de semn, exponentul și mantisa. Ecuațiile 4-1 și 4-2 arată cum se găsesc numerele reprezentate din aceste trei părți. MSB și LSB se referă la "cel mai semnificativ bit" și respectiv,"cel mai puțin semnificativ bit".

Mantisa M se formează din cei 23 de biți ca o fracție binară. De exemplu, fracția zecimală: 2,783, este interpretată ca: 2 + 7/10 + 8/100 + 3/1000. Fracția binară: 1,0101 înseamnă: 1+ 0/2 + 1/4 + 0/8 + 1/16. Numerele în virgulă mobilă sunt normalizate în același mod ca notația științifică, adică există o singură cifră nonzero la stânga virgulei zecimale (numită virgulă binară în baza 2). Întrucât singurul număr nonzero care există în baza doi este 1, cifra de vârf din mantisă va fi întotdeauna un 1 și, prin urmare, nu trebuie să fie stocată. Eliminarea acestei redundanțe permite numărului să aibă un bit suplimentar de precizie. Cei 23 de biți stocați, menționați prin notația: m22,m21,m20,…,m0, formează mantisa conform cu:

Ecuația 4-2

Algoritm pentru convertirea modelului de biți în mantisa M, utilizată în ec. 4-1.

Cu alte cuvinte, M = 1 + m222-1 + m212-2 + m202-3 . Dacă biții de la 0 la 22 sunt toți zerouri, M ia valoarea unu. În cazul în care biții 0 la 22 sunt toți unu, M este doar la un fir de păr sub doi, și anume, 2-2-23 .

Folosind această schemă de codificare, cel mai mare număr care poate fi reprezentat este: ±(2-2-23)×2128 = ±6.8×1038. De asemenea, cel mai mic număr care poate fi reprezentat este: ±1.0 × 2-127 = ±5.9 × 10-39 . Standardul IEEE reduce această gamă ușor, pentru a elibera modele de biți cărora li se atribuie semnificații speciale. În particular, cele mai mari și mai mici numere permise în standard sunt ±3,4 × 1038 și ± 1,2 × 10-38 respectiv. Modelele de bit liber permit trei clase speciale de numere: (1) ± 0 este definit ca toți biții din mantisă și exponent fiind zero. (2) ± ∞ este definit ca toți biți din mantisă fiind zero și toți biții din exponent fiind unul. (3) Un grup de numere foarte mici nenormalizate între ± 1,2 × 10-38 și ± 1,4 × 10-45. Acestea sunt numerele de precizie mai scăzută obținute prin eliminarea cerinței ca cea mai importantă cifră din mantisă să fie unu. Pe lângă aceste trei clase speciale, există modele de biți care nu sunt atribuite unui înțeles, denumit în mod obișnuit NAN (Not A Number).

Standardul IEEE pentru dublă precizie adaugă mai mulți biți la formatul de simplă precizie. Dintre cei 64 de biți folosiți pentru a stoca un număr de precizie dublă, biții 0 până la 51 sunt mantisa, biții 52 până la 62 sunt exponentul și bitul 63 este bitul de semn. Ca și înainte, mantisa este între unu și puțin sub doi, adică M = 1 +m512-1 +m502-2 + m492-3… Cei 11 biți de la exponent formează un număr între 0 și 2047, cu un decalaj de 1023, permițând exponenților de la 2-1023 la 21024. Cel mai mare și cel mai mic număr permis este de ±1,8 × 10308 și ± 2,2 × 10-308 , respectiv. Acestea sunt numere incredibil de mari și mici! Este destul de neobișnuit să se găsească o aplicație în care precizia simplă nu este adecvată. Probabil că nu veți găsi vreodată un caz în care dubla precizie limitează ceea ce doriți să realizați.

Secțiunea următoare: Precizia numărului