Articles

numere în virgulă mobilă

de ce sunt necesare numere în virgulă mobilă

deoarece memoria computerului este limitată, nu puteți stoca numere cu o precizie infinită, indiferent dacă utilizați fracții binare sau zecimale: la un moment dat trebuie să tăiați. Dar cât de multă precizie este necesară? Și unde este nevoie? Câte cifre întregi și câte cifre fracționale?

  • pentru un inginer care construiește o autostradă, nu contează dacă este de 10 metri sau 10.0001 metri lățime – măsurătorile lor nu sunt probabil atât de exacte în primul rând.
  • pentru cineva care proiectează un microcip, 0,0001 metri (o zecime de milimetru) este o diferență uriașă – dar nu va trebui niciodată să facă față unei distanțe mai mari de 0,1 metri.
  • un fizician trebuie să folosească viteza luminii (aproximativ 300000000) și constanta gravitațională a lui Newton (aproximativ 0,000000000667) împreună în același calcul.

pentru a satisface inginerul și proiectantul de cipuri, un format de număr trebuie să ofere precizie pentru numere cu magnitudini foarte diferite. Cu toate acestea, este necesară doar o precizie relativă. Pentru a satisface fizicianul, trebuie să fie posibil să se facă calcule care implică numere cu magnitudini diferite.

practic, a avea un număr fix de cifre întregi și fracționare nu este util – iar soluția este un format cu un punct plutitor.

cum funcționează numerele în virgulă mobilă

ideea este de a compune un număr de două părți principale:

  • a significand care conține cifrele numărului. Semnificațiile Negative reprezintă numere negative.
  • un exponent care spune unde este plasat punctul zecimal (sau binar) în raport cu începutul semnificației. Exponenții negativi reprezintă numere foarte mici (adică aproape de zero).

un astfel de format satisface toate cerințele:

  • poate reprezenta numere la magnitudini extrem de diferite (limitate de lungimea exponentului)
  • oferă aceeași precizie relativă la toate mărimile (limitate de lungimea semnificației)
  • permite calcule între magnitudini: înmulțirea unui număr foarte mare și a unui număr foarte mic păstrează acuratețea ambelor rezultate.

numerele zecimale în virgulă mobilă iau de obicei forma notației științifice cu punct anexplicit întotdeauna între cifrele 1 și 2. Exponentul estefie scris în mod explicit, inclusiv baza, sau un e este folosit pentru ao separa de semnificativși.

standardul

aproape toate limbajele hardware și de programare folosesc numere în virgulă mobilă în aceleași formate binare, care sunt definite în standardul IEEE 754. Formatele obișnuite sunt de 32 sau 64 de biți în lungime totală:

Format Total bits Significand bits Exponent bits Smallest number Largest number
Single precision 32 23 + 1 sign 8 ca. 1.2 ⋅ 10-38 ca. 3.4 ⋅ 1038
Double precision 64 52 + 1 sign 11 ca. 2.2 ⋅ 10-308 ca. 1.8 10308

rețineți că există unele particularități:

  • secvența reală de biți este mai întâi bitul semnului, urmat de exponent și în final de biții semnificativi.
  • exponentul nu are un semn; în schimb, o prejudecată exponentă este scăzută din ea (127 pentru single și 1023 pentru precizie dublă). Aceasta și secvența de biți permit compararea și sortarea corectă a numerelor în virgulă mobilă chiar și atunci când le interpretați ca numere întregi.
  • cea mai semnificativă cifră a significand este omisă și presupusă a fi 1, cu excepția numerelor subnormale care sunt marcate de un exponent all-0 și permit un interval de numere dincolo de cele mai mici numere date în tabelul de mai sus, cu prețul preciziei.
  • există valori zero pozitive și negative separate, care diferă în bitul semnului, unde toți ceilalți biți sunt 0. Acestea trebuie considerate egale, chiar dacă modelele lor de biți sunt diferite.
  • există valori infinite pozitive și negative speciale, unde exponentul este tot 1-biți, iar semnificativul este tot 0-biți. Acestea sunt rezultatele calculelor în care intervalul pozitiv al exponentului este depășit sau împărțirea unui număr regulat la zero.
  • există valori speciale nu un număr (sau NaN) în care exponentul este tot 1-biți și significand nu este tot 0-biți. Acestea reprezintă rezultatul diferitelor calcule nedefinite (cum ar fi înmulțirea 0 și infinit, orice calcul care implică o valoare NaN sau cazuri specifice aplicației). Chiar și valorile Nan identice cu biți nu trebuie considerate egale.

dacă acest lucru pare prea abstract și doriți să vedeți cum arată unele valori specifice în IEE 754, încercați jucăria Float sau vizualizarea IEEE 754 sau float Exposed.