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

Legkisebb és legnagyobb decimális érték

Legkisebb és legnagyobb decimális érték

Ebben a leckében megtanuljuk, mit jelent egy számrendszerben a legkisebb és legnagyobb decimális érték. Megnézzük, hogyan lehet kiszámolni, meddig terjedhetnek a számok egy adott alapú rendszerben. Közben kiderül, hogy minden rendszernek megvannak a határai, de a...

bővebben
Helyiérték

Helyiérték

Nem elég tudni, hogy valahol egy egyes, kettes vagy hármas szám szerepel, azt is kell tudni, hogy hol van az a számjegy és mennyit ér ott.  Ebben a leckében megmutatjuk, hogyan lesz a tizedesvesszőn innen és túl minden szám mögött logika és szabály.  Ne aggódj, nem...

bővebben
Endinaitás

Endinaitás

Mi az az endianitás? Az endianitás lényege, hogy meghatározza, milyen sorrendben tárolja és olvassa ki a számítógép a több byte-ból álló adatokat.Másképp fogalmazva: amikor a gép elment egy számot, eldönti, melyik byte kerüljön előre és melyik hátra – ez alapján fogja...

bővebben