Lebegőpontos számábrázolás

A koproci hogyan ábrázolja a lebegőpontos számokat?

Lebegőpontosan tárolt számokat általában akkor használunk, ha

Minden szám felírható exponenciális alakban, méghozzá többféleképpen is, pl.: (a tizedespont "lebeg" a számjegyek között).

Általános formában:

ahol,
ekm
Hogy a matissza és a karakterisztika hány biten tároljuk, ehhez az
szabvány a következő formátumokat vezeti be:

TípusPontosságHosszBiteloszlásNulla pontPascalC
Egyszerű pontosság6-7 jegy32 bit1-8-23127singlefloat
Dupla pontosság15-16 jegy64 bit1-11-521023doubledouble
Bővített pontosság19 jegy80 bit1-15-1-6316383extendedlongdouble

A koprocesszor is ezeket a formátumokat támogatja.

A Pascal nyelvben létezik még egy real típus is, amelynél szoftveres úton számol a fordító program, ezért használata nem igényli a koprocesszort, de ugyanakkor sokkal lassabb kódot eredményez. Ezen típus adatai:

TípusPontosságHosszBiteloszlásNulla pontPascalC
Szoftveres11-12 jegy48 bit1-39-8129real-

Hogy a tárolás teljesen egyértelmű legyen, oldjunk meg egy konkrét példát:

Ábrázoljuk a 13,625-t egyszerű potossággal!

  1. Felírva kettes számrendszerben: 1101,1012
  2. Normalizálva: 1,1011012 * 23 (a mantissza eleje mindig "1," lesz, ezért ez tároláskor elhagyható!)
  3. A karakterisztika = nulla pont + 3 = 127 + 3 = 130 = 1000 00102
  4. A megfelelő bitmezőket kitöltve:
    0100 0001 0101 1010 0000 0000 0000 0000
  5. Ugyanez hexában:
    415A0000
  6. Memóriában az Intel bájtsorrenddel:
    00005A41