Mer detaljer om flyttalsformatet

Antag att vi har lagrat 64 bitar i minnet och där bitarna är grupperade i de tre grupperna [s e f]. s är teckenbiten, e är exponentdelen (11 bitar) och de resterande 52 bitarna kallas f (för fraction och dessa utgör normalt en del av mantissan).

Det tal som svarar mot dessa bitar är då:
 

  1. Om e = 2047 och f inte är noll så är talet NaN oberoende av vad s är.

  2. Om e = 2047 och f = 0 då är talet (-1)s Inf.

  3. Om 0 < e < 2047 så är talet (-1)s 2e-1023 1.f.

  4. Om e = 0 och f inte är noll så är talet (-1)s 2-1022 0.f.

  5. Om e = 0 och f = 0 så är talet (-1)s 0.

Några kommentarer. Fall två beskriver formatet för +Inf och -Inf. Fall tre beskriver normalfallet, ett normaliserat flyttal och fall fyra beskriver ett denormaliserat flyttal. Det sista fallet beskriver +0 och -0.

Några exempel från Matlab:

>> format hex
>> -3.25
ans =
c00a000000000000

Detta hexadecimala tal svarar mot bitarna:

1100 0000 0000 1010 och resten nollor

Teckenbiten (den första) är alltså ett. e = 10000000000 som är 1024 decimalt. Detta gör att vi har fall tre. f = 101000000... Talet är alltså (-1)1 21024-1023 1.101 som just är decimalt -3.25.

>> 1e-323
ans =
0000000000000002

Här s = 0, e = 00000000000 och f = 0...010, där 50 nollor ligger till vänster om ettan. Eftersom e är noll men f är skilt från noll, så har vi fall fyra och talet är denormaliserat. Talet är alltså (-1)0 20-1022 0.0...0010 som är 2-1073. Detta värde är 9.88...e-324 så vi har ett rätt stort fel (men det är ju bara två bitar kvar).


Hur avrundas ett tal om det ligger precis mittemellan två flyttal? Flyttalet med den minst signifikanta biten lika med noll skall då väljas.


Back