IEEE 754

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.

Strukturen til et flyttallnummer

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.

32-biters tall

Et tall i en 32-bits streng er representert nedenfor:

1 8 23 lengde i biter + - + -------- + ---------------------------- + | S | Exp. | Mantissa | + - + -------- + ---------------------------- + 31 30 22 0 bit indeks

Verdien 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, m

I 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 0

64-biters tall

64-biters presisjon er det dobbelte av 32-bits presisjon tatt som grunnlag av standarden:

1 11 52 + - + ----------- + ---------------------------------- ------------------ + | S | Esp | Mantissa | + - + ----------- + ---------------------------------- ------------------ + 63 62 51 0

NaN-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.

128-bit tall

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).

Revisjon av standarden

Standarden er for tiden under revisjon ( IEEE 754r ).

Konvertering fra desimal til P754-format

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:

  1. Først av alt må tallet, i absolutt verdi, konverteres til binært.
  2. Tallet blir deretter delt (eller multiplisert) med 2 for å få en form av typen 1, xxxxxx.
  3. Den innledende 1-en av dette nummeret slettes (for å spare minne)
  4. Antall ganger tallet har blitt delt (eller multiplisert, og i så fall vil verdien være negativ) med 2 representerer eksponenten: denne verdien (desimaltall) må uttrykkes i overkant av 127, dvs. det er nødvendig å legge til 127 og konverter det resulterende tallet til binært. Ved dobbel presisjonsrepresentasjon (se følgende definisjon) uttrykkes eksponentverdien i overkant av 1023.

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).

  1. I det første tilfellet kan vi skrive verdien ved å bruke 1 bit for tegnet, 8 biter for eksponenten og 23 biter for mantissen.
  2. I det andre tilfellet vil det være nødvendig med 1 bit for tegnet, 11 biter for eksponenten og 52 for mantissen.
  3. I det tredje tilfellet vil det være nødvendig med 1 bit for tegnet, 15 biter for eksponenten og 112 for mantissen.

La oss for eksempel konvertere verdien til binær P754 singel:

  1. La oss konvertere tallet først: for heltallsdelen e . Så det endelige tallet er (tegn ekskludert).
  2. Vi deler deretter tallet med 2 for å få følgende notasjon:
  3. Mantissen blir da: 1100101.
  4. For å uttrykke den overskytende eksponenten 127, til slutt:

Tallet, på slutten, vil bli uttrykt i formatet:

1 10000010 110010100000000000000000

Beregningseksempel for enkeltpresisjon (32-bit) tall

La oss ta det negative brøktallet for eksempel:

-5,828125

La 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.110101

Vi flytter kommaet to steder til venstre, og omskriver resultatet på denne måten:

1,01110101 * 2 ^ 2

Vi 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 = 129

La 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 0

I base seksten vil vårt standard IEEE 754 flyttall være:

C0BA8000

Relaterte elementer

Andre prosjekter

Eksterne lenker