IEEE-standarden for flytpunktberegning ( IEEE 754 ) (offisielt: IEEE Standard for Binary Floating-Point Arithmetic (ANSI / IEEE Std 754-1985) eller også IEC 60559: 1989, Binær flyttallsaritmetikk for mikroprosessorsystemer ) mest utbredt standard innen automatisk beregning. Denne standarden definerer formatet for representasjonen av flyttall (inkludert ± 0 og denormaliserte tall ; infinitiver og NaNs , " ikke et tall "), og et sett med operasjoner som kan utføres på disse. Den spesifiserer også fire avrundingsmetoder og beskriver fem unntak.
Det er fire formater for flyttall i denne standarden: enkel presisjon (32 bit), dobbel presisjon (64 bit), utvidet enkel presisjon (≥ 43 bit), sjelden brukt, og utvidet dobbel presisjon (≥ 79 bit), vanligvis støttet med 80 bits. Enkel presisjon er minimum som kreves av standarden, de andre er valgfrie.
Et flyttallnummer, i henhold til IEEE-standarden, er representert på ord på 32, 64 eller 128 biter delt inn i tre deler:
i denne rekkefølgen. De n bitene av en streng indekseres i synkende rekkefølge med heltall fra 0 til n -1. I et nummer i denne standarden avtar betydningen av biten med dens indeks.
Et tall i en 32-bits streng er representert nedenfor:
1 8 23 lengde i biter + - + -------- + ---------------------------- + | S | Exp. | Mantissa | + - + -------- + ---------------------------- + 31 30 22 0 bit indeksVerdien av tallet som er representert kan beregnes som:
s -feltet spesifiserer tegnet til tallet: 0 for positive tall, 1 for negative tall . e -feltet inneholder eksponenten til tallet i heltallsform . Den består av 8 biter, og lar den representere 256 verdier. Verdiene 0 og 255 er reservert for spesielle funksjoner (beskrevet nedenfor); de andre tillater å representere 254 verdier for tall i normal form , mellom -126 og 127, siden dette feltet må kunne representere både store og minimale tall; men ved å bruke metoden som brukes for representasjon av heltallstegnet, ville det oppstå problemer for sammenligningen mellom tall. For å løse dette problemet er feltet representert i overkant k kalt bias (som er lik 2 ^ (n-1) -1 med n antall biter av eksponenten), så:
e = E + k
og gjensidig
E = e - k
I denne standarden, for enkeltpresisjonstall, er forspenningen lik 127. I denne representasjonen (kalt polarisering) antar verdiene til eksponenten mellom -126 og 127 verdiene mellom 1 når byten skrives. og 254, og eliminerer behovet for en reservert bit for tegn. Ved dekoding av tallet trekkes skjevheten igjen for å gjenopprette den opprinnelige verdien.
[-126, ..., 0, ..., 127] -> [-126 +127 , ..., 0 +127 , ..., 127 +127 ] -> [1, ... , 127 , ..., 254] -> [00000001, ..., 01111111, ..., 11111110]Verdiene antatt av eksponenten e og av mantissen m bestemmer om tallet tilhører en av disse kategoriene:
Eksponenten skiller tall på en primær måte, mantissen på en sekundær måte.
Kategori | Exp. | Mantissa |
---|---|---|
Null | 0 | 0 |
Denormaliserte tall | 0 | ikke null |
Normaliserte tall | 1-254 | samme det |
Uendelig | 255 | 0 |
Nan (ikke et tall) | 255 | ikke null |
m -feltet er en bitstreng som representerer sekvensen av sifre etter kommaet. Alle mantisser er normalisert slik at tallet før kommaet er 1, så for en gitt m er den tilsvarende matematiske verdien
M = 1, mI praksis består mantissen av det binære tallet 1 , etterfulgt av kommaet og heltallsdelen av tallet som er representert, i binær form; mantissen er altså kunstig mellom 1 og 2. Når et tall er normalisert, som vist ved eksponenten, utelates den første biten av mantissen , lik 1, for enkelhets skyld: den kalles derfor den skjulte biten , eller implisitt bit .
Med dette representasjonssystemet er det to nuller (+0 og −0) og to uendeligheter (+ ∞ og −∞) avhengig av verdien til den første biten. Videre kan subnormale tall ha et tegn og en mantisse , men de er kun nyttige for analyse.
Dette representasjonssystemet gjør det mulig å ha en nesten konstant relativ presisjon x for alle representable verdier. Faktisk
La oss ta et enkelt eksempel: vi koder tallet -118.5 i IEEE 754-systemet.
Vi må bestemme fortegn, eksponent og mantisse .
Siden det er et negativt tall, er den første biten "1".
Deretter skriver vi tallet i binær form : 1110110.1.
Så flytter vi kommaet til venstre, og etterlater bare en 1 til venstre :.
Mantissen er delen til høyre for kommaet, polstret med nuller til høyre for å fylle de 23 bitene: 11011010000000000000000 .
Eksponenten er lik 6, men vi må konvertere den til binær form og tilpasse den til standarden. For enkel presisjon må vi legge til 127. Så 6 + 127 = 133. I binær form: 10000101.
Montering av alt:
1 8 23 + - + -------- + ---------------------------- + | S | Esp | Mantissa | | 1 | 10000101 | 11011010000000000000000 | + - + -------- + ---------------------------- + 31 30 22 064-biters presisjon er det dobbelte av 32-bits presisjon tatt som grunnlag av standarden:
1 11 52 + - + ----------- + ---------------------------------- ------------------ + | S | Esp | Mantissa | + - + ----------- + ---------------------------------- ------------------ + 63 62 51 0NaN-ene og uendelighetene er representert med eksponenter dannet av en serie på 1 (lik 2047).
For normaliserte tall er skjevheten lik 1023 (så e = E + 1023). For denormaliserte tall er eksponenten −1022 (den minste eksponenten for et normalisert tall). Som før kan både uendelig og null representeres med begge fortegn.
Desimalpresisjon er omtrent 16 desimaler.
Til slutt regulerer standarden 128-bits tall, som tillater firedobbel presisjon sammenlignet med 32-bits tallene som er antatt som grunnlag av standarden:
1 15 112 + - + --------------- + ------------------------------------ -------------------------------------------------- + | S | Esp | Mantissa | + - + --------------- + ------------------------------------ -------------------------------------------------- +Antall bits dedikert til eksponenten stiger fra 11 til 15 og de for mantissen til 112.
Den totale presisjonen stiger til omtrent 34 desimaler.
Eksponentskjevheten er lik 16383 (derav e = E - 16383).
Standarden er for tiden under revisjon ( IEEE 754r ).
Det finnes utallige måter å representere flyttall på, men det mest brukte systemet er IEEE P754-standarden; denne metoden innebærer bruk av vitenskapelig notasjon, der hvert tall identifiseres med tegnet, med en mantisse (1, xxxxx) og av eksponenten ( ). Standardprosedyren for å konvertere fra desimaltall til binært tall P754 er som følger:
På dette tidspunktet har vi samlet inn all data som er nødvendig for å lagre antallet: basert på antall biter vi har tilgjengelig, kan vi bruke tre formater: enkeltpresisjonsformatet (32 bit), dobbelpresisjonsformatet (64 bit) og firedobbelt presisjonsformat (128 bit).
La oss for eksempel konvertere verdien til binær P754 singel:
Tallet, på slutten, vil bli uttrykt i formatet:
1 10000010 110010100000000000000000La oss ta det negative brøktallet for eksempel:
-5,828125La oss gjøre hele delen om til binær:
5: 2 = 2 R = 1 2: 2 = 1 R = 0 1: 2 = 0 R = 1 5 (10) = 101 (2)La oss nå transformere desimaldelen til binær:
0,828125 * 2 = 1,65625 U = 1 0,65625 * 2 = 1,3125 U = 1 0,3125 * 2 = 0,625 U = 0 0,625 * 2 = 1,25 U = 1 0,25 * 2 = 0,5 U = 0 0,5 * 2 = 1 U = 1 0,828125 (10) = 110101 (2)La oss nå kombinere de to delene:
101.110101Vi flytter kommaet to steder til venstre, og omskriver resultatet på denne måten:
1,01110101 * 2 ^ 2Vi får da den innledende delen av mantissen vår 01110101, og etter å ha flyttet desimaltegnet til venstre med to posisjoner for å få samme tall, må vi gange 2 i annen.
På dette tidspunktet får vi eksponenten ved å legge til 2 til skjevheten :
2 + 127 = 129La oss gjøre dette tallet til binært:
129: 2 = 64 R = 1 64: 2 = 32 R = 0 32: 2 = 16 R = 0 16: 2 = 8 R = 0 8: 2 = 4 R = 0 4: 2 = 2 R = 0 2: 2 = 1 R = 0 1: 2 = 0 R = 1 129 (10) = 10000001 (2)Vi fikk dermed vårt flyttall ved å huske å sette fortegnsbiten til 1 da vi startet fra et negativt tall:
-5,828125 (10) = 1 | 1000 0001 | 0111 0101 0000 0000 0000 000 (2)Hvis vi nå ønsker å uttrykke tallet som finnes i heksadesimal (uten å ta hensyn til det mulige Little Endian -formatet som vil endre arrangementet av bytene), må vi bare dele det inn i grupper på fire og finne de tilsvarende heksadesimale verdiene:
1100 0000 1011 1010 1000 0000 0000 0000 C 0 BA 8 0 0 0I base seksten vil vårt standard IEEE 754 flyttall være:
C0BA8000