Noțiunea de număr denormalizat este utilizată în reprezentarea numerelor în informatică prin metoda virgulă mobilă , așa cum este standardizat de standardul IEEE 754 . Este un mod de a reprezenta numere având o valoare foarte aproape de zero.
Reprezentarea în virgulă mobilă pentru calculatoare se bazează pe două concepte: notația științifică și sistemul binar (sau baza 2).
Pentru a scrie numere în baza 10, putem folosi așa-numita notație „științifică” , care include două părți:
sub forma „ n × 10 a ”. De exemplu :
Termenul „ exponent ” corespunde puterii 10, iar termenul mantissa corespunde părții zecimale. Astfel, în „1,23 × 10 −2 ”,
Sistemul binar , numit și „ baza 2”, este un mod de notare a numerelor care implică doar două cifre, 0 și 1. Este foarte potrivit pentru electronică, deoarece aceasta corespunde cu două stări foarte distincte: avem terminale aux ale unei componente a tensiunea V 0 sau o tensiune V 1 („curentul nu curge sau curentul trece”). Pentru a distinge această notație de notația zecimală, adăugăm aici un „b” la sfârșitul numărului. Iată câteva exemple de numere:
Un număr zecimal binar format din patru cifre n 1 n 0 , n -1 n -2 b corespunde numărului zecimal n 1 × 2 1 + n 0 × 2 0 + n -1 × 2 -1 + n -2 × 2 - 2 .
Astfel putem avea o notație științifică binară:
n 1 n 0 , n -1 n -2 b poate fi scris n 1 , n 0 n -1 n -2 b × 2 1 .de exemplu
În cazul notației științifice binare, numărul în virgulă mobilă trebuie să fie între 1b inclusiv și 10b exclus (adică 2 excluse), adică partea sa întreagă este în mod necesar 1b.
Conform standardului menționat, reprezentarea unui număr real poate fi împărțită în trei părți:
Valoarea numărului reprezentat este egală cu:
valoare = semn × (1 + mantisă ) × 2 ( exponent - offset)Într-adevăr, în notația științifică pe bază binară, întreaga parte este neapărat 1, de aceea este inutil să folosiți un pic pentru a-l reprezenta, cineva este mulțumit să reprezinte partea fracționată.
Se spune că un număr este denormalizat atunci când
Dacă am urma aceeași reprezentare ca și pentru numerele cu exponent diferit de zero, am avea
valoare = semn × (1 + mantisă ) × 2 -shiftdar valoarea reținută este
valoare = semn × mantissa × 2 -shift + 1adică pentru un exponent codat pe 8 biți (așa-numita reprezentare de precizie simplă), avem
valoare = semn × mantisă × 2 -126și că pentru un exponent codat pe 11 biți (așa-numita reprezentare cu precizie dublă), avem
valoare = semn × mantisă × 2 -1022Cu numere denormalizate, abandonăm notația științifică. Dacă mantisa corespunde cu 0,1b („b” înseamnă că suntem în modul binar, în baza doi), atunci:
vedem astfel că cel mai mic număr reprezentabil într-un mod normalizat este 1.000 ... 00b × 2 - shift (deoarece o mantisă nulă și un exponent nul sunt utilizate pentru a reprezenta zero), în timp ce în reprezentarea denormalizată, este 0.000 ... 01b × 2 - compensat . Prin urmare, putem reprezenta numere mai mici. De asemenea, asigură continuitatea cu numerele normalizate, deoarece:
sau un „salt” de 0,000 ... 01b × 2 - shift + 1
Prin urmare, avem, cu o precizie simplă:
Tip | Expozant | Mantissa | Valoare aproximativă | Abaterea / prev |
---|---|---|---|---|
Zero | 0000 0000 | 000 0000 0000 0000 0000 0000 | 0,0 | |
Cel mai mic număr denormalizat | 0000 0000 | 000 0000 0000 0000 0000 0001 | 1,4 × 10 −45 | 1,4 × 10 −45 |
Următorul număr denormalizat | 0000 0000 | 000 0000 0000 0000 0000 0010 | 2,8 × 10 −45 | 1,4 × 10 −45 |
Următorul număr denormalizat | 0000 0000 | 000 0000 0000 0000 0000 0011 | 4,2 × 10 −45 | 1,4 × 10 −45 |
... | ... | ... | ... | ... |
Cel mai mare număr denormalizat | 0000 0000 | 111 1111 1111 1111 1111 1111 | 1.175 494 21 × 10 −38 | 1,4 × 10 −45 |
Cel mai mic număr normalizat | 0000 0001 | 000 0000 0000 0000 0000 0000 | 1.175 494 35 × 10 −38 | 1,4 × 10 −45 |
Următorul număr standardizat | 0000 0001 | 000 0000 0000 0000 0000 0001 | 1.175 494 49 × 10 −38 | 1,4 × 10 −45 |