Információs technológia

Fixpontos számrendszerek

A számítógépek világa tele van különleges logikával – és a fixpontos számrendszerek pont egy olyan téma, ami elsőre bonyolultnak tűnhet, de valójában nagyon izgalmas!
Ebben a leckében anime-lány kalauzunk segít megérteni, hogyan működnek ezek a rendszerek: mit jelent a tizedespont helye,
hogyan határozza meg a számok pontosságát, és miért különböznek a lebegőpontos formátumtól. Lépésről lépésre haladunk, ábrákkal, példákkal – hogy a fixpontos számrendszerek érthetőek legyenek 

Anime lány magyarázza a fixpontos számrendszereket egy futurisztikus tanteremben

Mi az a fixpontos számrendszer?

Képzeld el, hogy egy számot szeretnél ábrázolni a számítógépben.
Ehhez a gép bitjeit (0-kat és 1-eket) használja, és a legfontosabb kérdés az, hol legyen a tizedespont.

A fixpontos számrendszerben ez a pont fix helyen van – azaz előre megmondjuk, hány bit tartozik az egész részhez, és hány a törtrészhez.
Innen jön a neve is: fixed-point, vagyis rögzített tizedespontú.

Ez különbözik a lebegőpontos rendszertől, ahol a pont helye változhat (azaz lebeg), és ezért sokkal nagyobb számokat is tudunk ábrázolni – de bonyolultabban.

Műveletek

A fixpontos számrendszerekkel ugyanúgy végezhetünk összeadást és kivonást, mint a sima egész számokkal – hiszen a bitműveletek megegyeznek.
De ha szorzást vagy osztást végzünk, figyelni kell a tizedespont helyére, mert az elmozdulhat.
Ez azért fontos, mert a végeredményben más lehet az egész–tört arány, mint amit eredetileg kijelöltünk.

Ez a képlet az előjeles, bináris fixpontos szám értékét adja meg. Nézzük meg részletesen, mit jelent:
bN1 -> az utolsó (legmagasabb helyiértékű bit, amit előjelbitnek nevezünk. Ha ez a szám 0, akkor a szám pozitív, ha 1, akkor a szám negatív.

N -> teljes bithossz, azaz hány bitből áll a szám, például 8 vagy 16

p -> a tizedespont helye, azaz hány bit tartozik a törtrészhez

2^i-p -> ez mutatja meg, hogy az adott bit milyen helyiértéket képvisel. 

A képlet tehát nem más, mint a szám bináris helyiértékeinek összege – figyelembe véve az előjelet és a tizedespont helyét. 

A tizedespontnak nincs szabadsága

Van az a pillanat, amikor a matek kicsit olyan, mint egy makacs rokon: nem szeret változtatni a helyén.
A fixpontos számrendszerek pontosan ilyenek — itt a tizedespont egyszerűen nem mozdul.
Mindig ugyanott van, akkor is, ha a világ összeomlik körülötte.

És bármilyen hihetetlen, ennek a „makacsságnak” komoly technológiai előnyei vannak.

Tizedespont egy bináris számsor közepén, két digitális katona őrzi, hogy ne mozdulhasson el

Mit jelent az, hogy „fixpontos”?

A számítógép minden számot bitek sorozataként tárol. Ha ezek egész számok, akkor egyszerű: minden bit egy-egy hatvány a kettes számrendszerben.
De mi van, ha törteket is szeretnénk tárolni? Valahol el kell helyezni a tizedespontot (vagy binárisban: radix point).

A fixpontos számrendszerben ez a pont előre meghatározott helyen van.
Mondjuk például: „a 16 bitből 8 az egész rész, 8 a törtrész”. Innentől kezdve nincs vita: minden számot ebben a formában kell értelmezni. Így néz ki például egy 16 bites fixpontos formátum (p = 8):

S EEEEEEE.FFFFFFFF
|   |     |       |
|   |     +---------> 8 bit a törtrész
|   +---------------> 7 bit az egész rész
+-------------------> előjelbit

Miért használják mégis?

Mert gyors.
A számítógép nem kell, hogy újra és újra kiszámolja, hová kell „tennie” a tizedespontot, mint a lebegőpontos műveleteknél.
A fixpontos forma sokkal egyszerűbb logikát igényel – és ez az egyszerűség értékes az olyan eszközöknél, ahol kevés az erőforrás: mikrokontrollerek, DSP-k, jelfeldolgozás, beágyazott rendszerek.

Ráadásul kis tartományban sokkal stabilabb és pontosabb, mint a lebegőpontos számok.
Ha például hangot vagy képet dolgozol fel, nem akarsz lebegő tizedespontokat, csak egy kis, precíz fix skálát.

A lépésköz – a rendszer „felbontása”

A fixpontos számrendszer egyik kulcsfogalma a Δr, azaz a differencia vagy felbontás.
Ez azt mutatja, mennyi a különbség két egymást követő szám között.


Δr=2p\Delta r = 2^{-p}

 

Ha p = 8, akkor:


Δr=28=12560.00390625\Delta r = 2^{-8} = \frac{1}{256} \approx 0.00390625

 

Ez azt jelenti, hogy a legkisebb „ugrás” a számok között kb. 0,0039.
Olyan ez, mintha a mérleged nem grammokat, hanem csak 4 grammos lépésekben mérne — nem rossz, csak tudni kell, hogy mennyire „durván” mérsz.

Egy konkrét példa

Legyen egy 16 bites fixpontos rendszer, ahol:

  • N = 16 bit

  • p = 8 bit (törtrész)

  • előjeles (2’s complement) formátumot használunk

Ez azt jelenti: 1 bit az előjelre, 7 bit az egész részre, 8 bit a törtrészre jut.

🔍 Számoljuk ki, mit tud ez a rendszer!
Jelölés Bináris alak Érték Magyarázat
V(zéró) 00000000.00000000 0.0 a nullapont
V(legkisebb pozitív) 00000000.00000001 1/256 = 0.00390625 a legapróbb pozitív érték
V(legnagyobb pozitív) 01111111.11111111 128 − 1/256 = 127.99609375 az utolsó pozitív szám a tartományban
V(legkisebb negatív) 10000000.00000000 −128 a legnagyobb negatív érték
V(legnagyobb negatív) 11111111.11111111 −1/256 = −0.00390625 a nullához legközelebbi negatív érték

Miért nem szimmetrikus a tartomány?

Ha ránézel a számokra, rögtön feltűnik, hogy a tartomány −128 és +127.996 között van.
És felmerül a kérdés:
„Miért nem −128 és +128?”
Teljesen jogos.

A válasz az előjelbit.

A fixpontos, előjeles bináris számok kétkomplementes formában működnek.
Ez azt jelenti, hogy az első (bal szélső) bit nem számértéket, hanem előjelet jelöl:

  • 0 → pozitív szám,

  • 1 → negatív szám.

Ettől viszont a tartomány egy kicsit félrebillen.
A pozitív oldalon az egyik kombináció (amikor minden bit 1 lenne) „átcsúszna” a negatív tartományba, ezért onnan egy szám hiányzik.

💬 Összefoglalva:
A legnagyobb negatív szám (−128) teljes egészében lefedett,
a legnagyobb pozitív pedig egy hajszállal kisebb (+127.996).
Nem hiba – ez a kétkomplementes kódolás természetes velejárója.

A tizedespont helye – miért „fix”?

Ez az egész történet lényege.
A „pont” nem egy tényleges karakter, nem tárolódik a memóriában.
A számítógép nem jegyzi meg, hova tettük a pontot – csak tudja, hogy hol kell képzeletben lennie.

Ha például azt mondjuk:
„Ez egy 16 bites fixpontos szám, amiben 8 bit a törtrész”,
akkor a gép automatikusan úgy értelmezi, hogy a tizedespont 8 bit után van a jobbról számolva.

Ez a fixpontos rendszerek legfontosabb szabálya:
a pont nem mozdulhat, mert ez az egész ábrázolás stabilitását adja.

💬 Gyakorlati példa:
Ha ugyanazt a 16 bitet másként értelmezed (mondjuk 4 bit törtrész, 12 egész), akkor a szám teljesen más értéket adna.
Ezért fix, mert a program és a hardver közösen megegyeznek a helyéről.

Pontosság vs. tartomány – az örök csereüzlet

Minél több bitet adsz a törtrészhez, annál pontosabban tudod kifejezni a számokat —
de közben kevesebb hely marad az egész részre.

Ha kevesebb bit a törtrész, akkor nagyobb számokat tudsz ábrázolni, de kevésbé részletesen.

Ez egy kompromisszum, amit minden mérnöknek meg kell kötni.

Olyan ez, mint a fényképeknél a felbontás:
ha túl nagyra nagyítasz, elveszik a részlet;
ha túl kicsire méretezel, minden pixeles lesz.

Példa:

  • p = 8 → 1/256-os pontosság, tartomány kb. −128…+127.996

  • p = 4 → 1/16-os pontosság, tartomány kb. −2048…+2047.9375

💬 Vagyis:
A pontosság mindig az ár, amit a nagyobb tartományért fizetsz.

Miért nem használ mindenki lebegőpontos számokat?

Jogos kérdés.
A lebegőpontos számok sokkal „rugalmasabbak” – a tizedespont helye változhat, így hatalmas tartományt fedhetnek le.
A kérdés viszont: mindenáron kell az a rugalmasság?

A válasz legtöbbször: nem.

A fixpontos számrendszereknek két hatalmas előnyük van:

Sebesség.
Egy mikrokontroller, ami például egy robotkart irányít, nem akar lebegőpontos számokat tologatni.
Az drága művelet, sok energiát és időt igényel.
A fixpont viszont azonnal működik, mert egyszerű egész műveleteket végez.

Kiszámíthatóság.
A fixpontos műveletek mindig ugyanazt az eredményt adják, nincs „kerekítési meglepetés”, mint a lebegőpontos világban.

Ha szeretnéd folytatni a tanulást, itt válogathatsz az információs technológia anyagok között

Előjeles kettes komplemens

Előjeles kettes komplemens

Az előző leckében már megtanultuk, hogyan működik a 2’s komplemens,és azt is láttuk, hogy ez a módszer teszi lehetővé, hogy a számítógép kivonást is összeadással tudjon elvégezni.(Aki lemaradt róla, itt tudja bepótolni 👉 Kettes komplemens – avagy hogyan gondolkodik a...

bővebben
1’s komplemens – így fordítja meg a gép a biteket

1’s komplemens – így fordítja meg a gép a biteket

Képzeld el, hogy a számítógép minden 0-t 1-re, és minden 1-et 0-ra cserél — ez az 1’s komplemens varázsa. 💡Ezzel a trükkel a gép a negatív számokat is el tudja tárolni anélkül, hogy külön „mínuszjelet” használná.A mai leckében anime-lányunk megmutatja, hogyan...

bővebben
Kettes komplemens: a bitek megfordítása

Kettes komplemens: a bitek megfordítása

avagy hogyan gondolkodik a gép a negatív számokrólA számítógépek nem „tudják”, mi az, hogy negatív szám.A gép szemében minden csak 0 és 1, vagyis bináris logika.A kérdés tehát az: hogyan lehet egy ilyen rendszerben azt kifejezni, hogy –5?Erre ad zseniális megoldást a...

bővebben