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 |
|
4 |
1 |
5 |
A |
0 |
0 |
0 |
0 |
|
00 |
00 |
5A |
41 |