Zobrazenie čísel v počítači: Rozdiel medzi revíziami
Zo stránky SensorWiki
(4 medziľahlé úpravy od rovnakého používateľa nie sú zobrazené.) | |||
Riadok 47: | Riadok 47: | ||
'''Príklad 1:''' Preveďte číslo ''0,6875''<sub>10</sub> do dvojkovej sústavy: | '''Príklad 1:''' Preveďte číslo ''0,6875''<sub>10</sub> ''0,6875''<sub>DEC</sub> do dvojkovej sústavy: | ||
[[Obrázok:Prev_db_dec_bin.jpg]] | <!-- [[Obrázok:Prev_db_dec_bin.jpg]] --> | ||
0,6875 x 2 = ''1'',3750 | 0,6875 x 2 = '''1''',3750 | ||
0,3750 x 2 = ''0'',7500 | 0,3750 x 2 = '''0''',7500 | ||
0,7500 x 2 = ''1'',5000 | 0,7500 x 2 = '''1''',5000 | ||
0,5000 x 2 = ''1'',0000 | 0,5000 x 2 = '''1''',0000 | ||
0,0000 x 2 = ''0'',0000 koniec | 0,0000 x 2 = '''0''',0000 koniec | ||
'''0,6875'''<sub>10</sub> = '''0,1011'''<sub>2</sub> | |||
'''Príklad 2:''' Preveďte číslo <math>\ 0,1_{10}</math> 0,1<sub>10</sub> 0,1<sub>DEC</sub> do dvojkovej sústavy: | |||
[[Obrázok:Prev_db1_dec_bin.jpg]] | |||
0,10 x 2 = '''0''',20 | |||
0,20 x 2 = '''0''',40 | |||
0,40 x 2 = '''0''',80 | |||
0,80 x 2 = '''1''',60 | |||
0,60 x 2 = '''1''',20 | |||
0,20 x 2 = '''0''',40 | |||
0,40 x 2 = '''0''',80 | |||
0,80 x 2 = '''1''',60 | |||
0,60 x 2 = '''1''',20 | |||
Číslo <math>\ 0,1_{10}</math> sa nedá vyjadriť konečným počtom binárnych číslic !! | Číslo <math>\ 0,1_{10}</math> sa nedá vyjadriť konečným počtom binárnych číslic !! | ||
Riadok 72: | Riadok 81: | ||
[[Obrázok:Prev_db_dec_okt.jpg]] | [[Obrázok:Prev_db_dec_okt.jpg]] | ||
<quiz shuffleanswers=true display=simple> | |||
{Preveďte <math>0,1011_{BIN}</math> do desiatkovej sústavy (v slovenčine používame desatinnú čiarku, nie bodku!): | |||
|type="{}"} | |||
{ 0,6875 } | |||
{Preveďte <math>0,65625_{DEC}</math> do dvojkovej sústavy: | |||
|type="{}"} | |||
{ 0,10101 } | |||
{Preveďte <math>3,14_{DEC}</math> do dvojkovej sústavy na 4 desatinné miesta: | |||
|type="{}"} | |||
{ 11,0010 } | |||
{Aká je chyba prevodu v predošlom príklade? Preveďte výsledok predošlého príkladu späť do desiatkovej sústavy a určte rozdiel medzi pôvodným a prevedeným číslom. | |||
|type="{}"} | |||
{ 0,015 } | |||
</quiz> | |||
== Zobrazenie v pohyblivej rádovej čiarke == | == Zobrazenie v pohyblivej rádovej čiarke == |
Aktuálna revízia z 08:49, 13. júl 2022
- 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 :
Metóda je založená na postupnom násobení desatinnej časti dekadického číslom .
kde: a je celé číslo.
kde: je celé číslo a
kde: je celé číslo a , atď.
Príklad 1: Preveďte číslo 0,687510 0,6875DEC 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,110 0,1DEC do dvojkovej sústavy:
0,10 x 2 = 0,20 0,20 x 2 = 0,40 0,40 x 2 = 0,80 0,80 x 2 = 1,60 0,60 x 2 = 1,20 0,20 x 2 = 0,40 0,40 x 2 = 0,80 0,80 x 2 = 1,60 0,60 x 2 = 1,20
Číslo sa nedá vyjadriť konečným počtom binárnych číslic !!
Príklad 3: Preveďte číslo do osmičkovej sústavy:
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.
![](/sensorwiki/images/4/47/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.