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å:
Om e = 2047 och f inte är noll så är talet NaN oberoende av vad s är.
Om e = 2047 och f = 0 då är talet (-1)s Inf.
Om 0 < e < 2047 så är talet (-1)s 2e-1023 1.f.
Om e = 0 och f inte är noll så är talet (-1)s 2-1022 0.f.
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.