Standardul IEEE pentru aritmetica în virgulă mobilă (IEEE 754) este un standard tehnic pentru calculul în virgulă mobilă care a fost stabilit în 1985 de către Institutul de Ingineri Electrici și Electronici (IEEE) . Standardul a abordat multe probleme găsite în diversele implementări în virgulă mobilă, care le-au făcut dificil de utilizat în mod fiabil și le-au redus portabilitatea. IEEE Standard 754 virgulă mobilă este cea mai comună reprezentare astăzi pentru numerele reale pe computere, inclusiv PC-uri bazate pe Intel, Mac-uri și majoritatea platformelor Unix.
Există mai multe moduri de a reprezenta numărul în virgulă mobilă, dar IEEE 754 este cel mai eficient în majoritatea cazurilor. IEEE 754 are 3 componente de bază:
- Semnul Mantisei -
Acesta este la fel de simplu ca și numele. 0 reprezintă un număr pozitiv, în timp ce 1 reprezintă un număr negativ. - Exponentul părtinitor –
Câmpul exponent trebuie să reprezinte atât exponenți pozitivi, cât și negativi. Se adaugă o prejudecată exponentului real pentru a obține exponentul stocat. - Mantisa normalizată -
Mantisa face parte dintr-un număr în notație științifică sau dintr-un număr în virgulă mobilă, format din cifrele sale semnificative. Aici avem doar 2 cifre, adică O și 1. Deci o mantisă normalizată este una cu un singur 1 la stânga zecimalei.
Numerele IEEE 754 sunt împărțite în două pe baza celor trei componente de mai sus: precizie simplă și precizie dublă.
java matematică aleatoare
| TIPURI | SEMN | EXPONENT părtinitor | MANTISA NORMALIZATA | PĂRTINIRE |
|---|---|---|---|---|
| Precizie unică | 1 (al 31-lea bit) | 8(30-23) | 23(22-0) | 127 |
| Precizie dubla | 1 (al 63-lea bit) | 11(62-52) | 52(51-0) | 1023 |
Exemplu –
matrice js
85.125 85 = 1010101 0.125 = 001 85.125 = 1010101.001 =1.010101001 x 2^6 sign = 0 1. Single precision: biased exponent 127+6=133 133 = 10000101 Normalised mantisa = 010101001 we will add 0's to complete the 23 bits The IEEE 754 Single precision is: = 0 10000101 01010100100000000000000 This can be written in hexadecimal form 42AA4000 2. Double precision: biased exponent 1023+6=1029 1029 = 10000000101 Normalised mantisa = 010101001 we will add 0's to complete the 52 bits The IEEE 754 Double precision is: = 0 10000000101 0101010010000000000000000000000000000000000000000000 This can be written in hexadecimal form 4055480000000000>
Valori speciale: IEEE a rezervat unele valori care pot duce la ambiguitate.
- Zero -
Zero este o valoare specială notată cu un exponent și mantisă de 0. -0 și +0 sunt valori distincte, deși ambele sunt egale.
- Denormalizat -
Dacă exponentul este total zero, dar mantisa nu este, atunci valoarea este un număr denormalizat. Aceasta înseamnă că acest număr nu are unul presupus înainte de punctul binar. - Infinitul -
Valorile +infinit și -infinit sunt notate cu un exponent al tuturor celor și o mantisă a tuturor zerourilor. Bitul de semn distinge între infinitul negativ și infinitul pozitiv. Operațiile cu valori infinite sunt bine definite în IEEE. - Nu este un număr (NAN) –
Valoarea NAN este utilizată pentru a reprezenta o valoare care este o eroare. Acest lucru este reprezentat atunci când câmpul exponentului este unul cu un bit cu semnul zero sau o mantisă care nu este 1 urmată de zerouri. Aceasta este o valoare specială care ar putea fi folosită pentru a desemna o variabilă care nu deține încă o valoare.
| EXPONENT | MANTISA | VALOARE |
|---|---|---|
| 0 | 0 | exact 0 |
| 255 | 0 | Infinit |
| 0 | nu 0 | denormalizat |
| 255 | nu 010 din 50 | Nu este un număr (NAN) |
Similar pentru precizie dublă (doar înlocuind 255 cu 2049), intervale de numere în virgulă mobilă:
care este sistemul de fișiere linux
| Denormalizat | Normalizat | Decimală aproximativă | |
|---|---|---|---|
| Precizie unică | ±2-149la (1 – 2-23)×2-126 | ±2-126la (2 – 2-23)×2127 | ± aproximativ 10-44,85la aproximativ 1038,53 |
| Precizie dubla | ±2-1074la (1 – 2-52)×2-1022 | ±2-1022la (2 – 2-52)×21023 | ± aproximativ 10-323,3la aproximativ 10308,3 |
Gama de numere pozitive în virgulă mobilă poate fi împărțită în numere normalizate și numere denormalizate care utilizează doar o parte din precizia fracțiilor. Deoarece fiecare număr în virgulă mobilă are o valoare corespunzătoare, negata, intervalele de mai sus sunt simetrice în jurul zero.
Există cinci intervale numerice distincte pe care numerele cu virgulă mobilă cu precizie unică nu le pot reprezenta cu schema prezentată până acum:
- Numerele negative mai mici decât – (2 – 2-23) × 2127(debordare negativă)
- Numerele negative mai mari decât – 2-149(subflow negativ)
- Zero
- Numerele pozitive mai mici de 2-149(subflow pozitiv)
- Numerele pozitive mai mari decât (2 – 2-23) × 2127(debordare pozitivă)
Overflow înseamnă în general că valorile au crescut prea mari pentru a fi reprezentate. Depășirea insuficientă este o problemă mai puțin gravă, deoarece denotă doar o pierdere de precizie, care este garantată a fi aproape aproape de zero.
Tabelul cu intervalul efectiv total al numerelor în virgulă mobilă IEEE finite este prezentat mai jos:
| Binar | Zecimal | |
|---|---|---|
| Singur | ± (2 – 2-23) × 2127 | aproximativ ± 1038,53 |
| Dubla | ± (2 – 2-52) × 21023 | aproximativ ± 10308,25 |
Operațiuni speciale -
| Operațiune | Rezultat |
|---|---|
| n ÷ ±Infinit | 0 |
| ±Infinit × ±Infinit | ±Infinitul |
| ±nonZero ÷ ±0 | ±Infinitul |
| ±finit × ±Infinit | ±Infinitul |
| Infinit + Infinit Infinit – -Infinit | +Infinitul |
| -Infinit – Infinit -Infinit + – Infinit | – Infinitul |
| ±0 ÷ ±0 | NaN |
| ±Infinit ÷ ±Infinit | NaN |
| ±Infinit × 0 | NaN |
| NaN == NaN | Fals |