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

8,4 * 101 = 0,84 * 102

(a tizedespont "lebeg" a számjegyek között).

Általános formában:     m* pk

ahol,

e

k

m

ˇ         e: a mantissza előjele, a karakterisztika előjelét nem tárolják külön biten, helyette kineveznek egy értékét nulla pontnak.

Hogy a matissza és a karakterisztika hány biten tároljuk, ehhez az "IEEE Standard for Binary Floating-Point Arithmetic" ANSI / IEEE Std 754-1985 New York szabvány a következő formátumokat vezeti be:

Típus

Pontosság

Hossz

Biteloszlás

Nulla pont

Pascal

C

Egyszerű pontosság

6-7 jegy

32 bit

1-8-23

127

single

float

Dupla pontosság

15-16 jegy

64 bit

1-11-52

1023

double

double

Bővített pontosság

19 jegy

80 bit

1-15-1-63

16383

extended

longdouble

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ípus

Pontosság

Hossz

Biteloszlás

Nulla pont

Pascal

C

Szoftveres

11-12 jegy

48 bit

1-39-8

129

real

-

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:

0

100 0001 0

101 1010 0000 0000 0000 0000

  1. Ugyanez hexában:

4

1

5

A

0

0

0

0

  1. Memóriában az Intel bájtsorrenddel:

00

00

5A

41