Zobrazenie čísel v počítači

Z SensorWiki
Prejsť na: navigácia, hľadanie
  • Záporné čísla
  • Racionálne čísla
  • Reálne čísla
  • Strojové epsilon
  • Počítačová nula

Zobrazenie v pevnej rádovej čiarke

Číslo v pevnej rádovej čiarke zapisujeme ako postupnosť dvojkových číslic, pričom prvý bit spravidla určuje znamienko a ostatné sú platné číslice reprezentovaného čísla. Umiestnenie desatinnej čiarky (vzhľadom na to, že ide o číslo kódované v pevnej rádovej čiarke) je vopred určené a nemenné. Zvyčajne sa umiestňuje medzi prvý (znamienkový) a druhý bit.

Pevné miesto rádovej čiarky má tú výhodu, že ju možno zo zobrazenia vynechať. Z toho dôvodu má číslo napríklad 11010101 číselne vyjadrenie –0,1010101, pričom znak mínus predstavuje jednotka na prvom mieste a desatinnú časť číslice od druhej pozície.


Prevod desatinného dvojkového čísla na desiatkové:

1101012 = 1 × 2-1 + 1 × 2-2 + 0×2-3 + 1×2-4 + 0×2-5 + 1×2-6 =

= 0,5 + 0,25 + 0 + 0,0625 + 0 + 0,015625 = 0,82812510

Obmedzený počet bitov určuje, že v počítači nemôžeme zobraziť číslo s ľubovoľnou presnosťou. Najmenšie kladné zobraziteľné číslo je číslo obsahujúce samé nuly, okrem poslednej pozície, ktorá je 1 (0000...001). Čísla menšie ako minimálne zobraziteľné označujeme ako strojovú nulu – nedokážeme ich vyjadriť a počítame s nimi ako s hodnotou 0. Pri zobrazovaní čísel, ktorých desatinná časť tvorí viac ako vyhradený počet číslic, sa zanedbávajú najnižšie rády čísla a tým je obmedzená presnosť výpočtu.

Prevod desatinnej časti dekadického čísla do sústavy so základom \ z :

Metóda je založená na postupnom násobení desatinnej časti dekadického \ N číslom \ z.

D*z\ =\ M\ +\ D

kde:|D|<\ 1,\qquad  |D_1|<\ 1 a \ M je celé číslo.

(N)_z\ =\ a_{-1}z^{-1}\ +\ a_{-2}z^{-2}+\ ...\ +\ a_{-k}z^{-k}

(N)_z*z\ =\ a_{-1}\ +\ (N_1)_z \qquad |(N)_z|< 1

kde: \ a_{-1} je celé číslo a (N_1)_z\ <\ 1

(N_1)_z*z\ =\ a_{-2}\ +\ (N_2)_z

kde: \ a_{-2} je celé číslo a (N_2)_z\ <\ 1, atď.


Príklad 1: Preveďte číslo 0,687510 do dvojkovej sústavy:


0,6875 x 2 = 1,3750
0,3750 x 2 = 0,7500
0,7500 x 2 = 1,5000
0,5000 x 2 = 1,0000
0,0000 x 2 = 0,0000  koniec
   
  0,687510 = 0,10112


Príklad 2: Preveďte číslo \ 0,1_{10} do dvojkovej sústavy:

Prev db1 dec bin.jpg

Číslo \ 0,1_{10} sa nedá vyjadriť konečným počtom binárnych číslic !!


Príklad 3: Preveďte číslo \ 0,12_{10} do osmičkovej sústavy:

Prev db dec okt.jpg

Zobrazenie v pohyblivej rádovej čiarke

Je to vhodný spôsob reprezentácie čísel, ktoré sú na vyjadrenie v pevnej rádovej čiarke príliš malé, alebo príliš veľké. Čísla sa ukladá ako určité množstvo platných číslic (mantisa) vynásobený exponentom. Základom exponentu býva väčšinou 2, 10 alebo 16. Čísla, ktoré vieme v pohyblivej rádovej čiarke vyjadriť presne, sú zapísané v tvare:

   mantisa × základexponent

Postupne sa časom používalo niekoľko rôznych systémov reprezentácie čísel v počítaťi, ale napokon takmer všetci používajú reprezentáciu definovanu v norme IEEE 754.


Na cvičení nebudeme pracovať s pomerne komplikovaným systémom IEEE 754 ale pre porozumenie si spravíme svoj vlastný, menej presný.

Úloha:

Najprv vypočítajte a potom nakreslite všetky prvky počítačovej množiny s pohyblivou rádovou čiarkou F(2,2,-4,3). 
Nakreslite celú množinu a potom ešte zvlášť interval <-1,1>. V tejto úlohe odovzdávate cvičiacemu dva obrázky!

Definícia: F(2,n,Emin,Emax) znamená, že čísla sú v dvojkovej sústave, mantisa má dĺžku n bitov a rozsah exponentov je od Emin po Emax. Mantisa je normalizovaná s jednotkou pred desatinnou čiarkou.



Ako je to teda s mantisou a exponentom?

Prvý bit (pozri obr.) je znamienko mantisy. 0 je plus a 1 mínus.

Float2.gif

Mantisa je v normalizovaná, t.j. v tvare 1,mmmmmmm teda hodnoty mantisy budú z binárnych intervalov <-1.11,-1.00>2 a <1.00,1.11>2, t.j. <-1.75,-1.00>10 a <1.00,1.75>10. Nezabudnite, že prvá 1 sa do počítača neukladá, ušetrí sa tak bit.


Exponent je v rozsahnu <-4,3>, viac na vyriešenie úlohy nepotrebujete vedieť. Ak vás zaujíma ako je to zakódované, potom na rozsah <-4,3> potrebujeme tri bity. Exponent nie je v doplnkovom kóde, ale je posunutý. Najlepšie asi ozrejmí nasledovná tabuľka.

       kód    číslo   exponent
       000      0       -4
       001      1       -3
       010      2       -2
       011      3       -1
       100      4        0
       101      5        1
       110      6        2
       111      7        3


Ako vidno, v takomto zápise čísel v pohyblivej rádovej čiarke nám chýba NULA. Preto sa treba dohodnúť, ktoré číslo bude reprezentovať nulu. Pre riešenie našej úlohy nulu nepotrebujeme. Ak by sme napodobnili formát IEEE 754, potom ak exponent je nula, tak toto číslo sa nazýva nula. Ak je exponent zo samých jednotiek, potom je to buď plus, alebo mínus nekonečno, prípadne symbol NaN (Not A Number - nie je číslo).


Ako je to naozaj vo formáte IEEE 754

Mantisa je v IEEE formáte reprezentovaná v tvare znamienko (signum) a číslo (magnitude). Navyše sa predpokladá, že mantisa je vždy normalizovaná v tvare 1.mmmmm... Tá jednotka je tam vždy, preto ju ani neukladáme do pamäti. Rozsah hodnôt mantisy sa pohybuje v intervaloch (-2,-1> a <1,2).


Exponenty sa vo formáte IEEE 754 vyjadrujú v tzv. posunutej (biased) podobe, takže od binárnej reprezentácie exponentu sa odpočíta konštanta (bias, offset) 127 (resp. 1023 pre 64 bitov double).


Výhoda posunutého exponentu je, že samé nuly sú najmenší exponent a takéto číslo je vybraté za symbol NULA. Aj druhý hraničný exponent (samé jednotky) má v IEEE 754 formáte špeciálny význam -- takéto číslo je buď kladné, alebo záporné nekonečno, prípadne tzv. NaN (Not a Number). Tieto špeciálne čísla sú popísané podrobne v tabuľke na konci tohoto článku.