Lebegőpontos szám: mi ez? Egyszerűen magyarázva példákkal
Ebben a gyakorlati tippben megmutatjuk, mi az a lebegőpontos szám, és hogyan különbözik a rögzített pontszámtól.
Lebegőpontos szám: mi ez?
A számítástechnikában a lebegőpontos számot gyakran használják olyan eszközök mérésére, amelyek állítólag bizonyos pontossággal működnek.
- A lebegőpontos szám (vagy "lebegőpontos szám") egy szám ábrázolása exponenciális jelöléssel. Kivételes esetekben ez csak megközelítőleg működik. A 1230000 számot az 1.23 ⋅ 10⁶ számmal is ábrázolhatja.
- Az 1.23-at "Mantissa" -nak hívják. A 10 a "bázis" és a 6 a "kitevő". Mellesleg, egy jel is hozzáadható a mantissához. Az egészet a kettős rendszerre is alkalmazhatja. A 10101100 számot az 1.0101100 ⋅ 2⁷ számmal is ábrázolhatja. A számítógép csak a jelet, a mantissát és az exponenst tárolja.
- A számítógépek általában a vesszőt előre-hátra mozgatják, amíg a vessző előtt csak egy van. Ezután a PC-nek csak a mantissa és az exponens tizedesjegyét kell mentenie.
- Annak érdekében, hogy az exponenst pozitív számként elmentsük, egy rögzített számot, az úgynevezett torzítást adunk hozzá. A hely lehető legalacsonyabb exponensét a tizedes pont elõtt (- torzítás) 0-ra menti.
- A rögzített pont számmal ellentétben a vessző nincs rögzített pontban egy lebegőpontos számban.
Fél, lebegő és dupla - a lebegőpontos számok általános kódolása
Bizonyára megbotlott ezen a három kifejezésen, különösen az Arduino-val való programozás során. Ezek szabványosított ábrázolások.
- A "half" adattípus egy 16 bites szám. A bal oldali bit a felelős a jelért. Az exponensnek 5 bitje van, és a 10 mantissa. Az alkalmazott torzítás 15. Mivel a mantissa első bitje (szinte) mindig 1, ez nem kerül mentésre.
- Az "úszó" (vagy "egyetlen") adattípus egy 32 bites szám. Itt is egy kicsit használják a jelzésre. Az exponensnek azonban 8 bitje van (torzítás = 127) és a 23 mantissa.
- A "dupla" adattípus egy kicsit is használja a jelet. Itt azonban az exponens 11 bittel rendelkezik (torzítás = 1023), a mantissán pedig 52 bittel rendelkezik. Összességében ez 64 bit, azaz 8 bájt.
- E három általános adattípuson kívül még sok más létezik. Ezeket azonban általában nem használják, mert a fele, az úszó és a dupla pontossága már elég jó.
A decimális számok konvertálása lebegőpontos számokká - hogyan működik
Végül szeretnénk megmutatni, hogyan lehet egy normál tizedes számot lebegőpontos számmá konvertálni.
- Ebben a példában a 18.4 tizedes számot használjuk. A tizedes pont előtti számot először utalják át a kettős rendszerbe. Ennek eredményeként kapnia kell (10010) ₂.
- Akkor konvertálnia kell a 0.4-et. Először szorozza meg a 0, 4-t 2-del. Eredményként 0, 8-t kap. Jegyezze fel a számot a vessző előtt. Ebben az esetben nulla. Ezután szorozza meg a 0, 8-t 2-del. Ezúttal 1, 6 eredményt kap. Jegyezze fel az 1-t, és folytassa a számítást 0, 6-tal. Egy idő után észreveszi, hogy a minta megismétlődik (ebben a példában). Végül írja le az összes számot felülről lefelé: 011001100110 ...
- Ezután összeadja a számokat: Adjon hozzá még (⋅ 2⁰), hogy 10010, 01100110 ... ⋅ 2⋅ értéket kapjon. Ezután mozgassa a vesszőt, amíg a tizedes pont előtt csak egy van, és változtassa meg a teljesítményt is. Ennek eredményeként 1, 001001100110 ... ⋅ 2⁴ értéket kell kapnia, mivel 4 tizedes pontot balra mozgatott. Ezt a lépést normalizálásnak is nevezik.
- Ebben a példában a "float" adattípust használjuk. Tehát adja hozzá a megfelelő torzítási értéket az exponenssel. A 4 + 127 = 131 számítás eredményét bináris számra kell konvertálnia. A 131 szám a kettős rendszerben az 10000011 szám.
- Most felírhatja a kész lebegőpontos számot. Először írja meg a kicsit a jelhez. Mivel ez pozitív szám, az első bit egy 0. Akkor 131-et kell írni. Ebben az esetben az egész tökéletesen illeszkedik, mivel ehhez a számhoz 8 bit szükséges, és 8 bit áll rendelkezésre úszóhoz. Végül le kell írnia a mantissa első 23 bitjét, mivel a mantissa 23 bittel rendelkezik úszó készítéséhez.
- Ezért a kész lebegőpontos számnak 01000001100100110011001100110011 számnak kell lennie. Kicsit világosabb a 0-os szám | 10000011 | 00100110011001100110011.
A lebegőpontos szám átalakítása decimális számgá - Íme
Végül szeretnénk megmutatni, hogyan lehet újra átalakítani a lebegőpontos számot decimális számgá. Ehhez a 1000001100100110011001100110011 számot vesszük.
- Először töltse ki a számot (elülső) nullával, amíg 16, 32 vagy 64 bites számot nem kap. Ebben az esetben ez a 01000001100100110011001100110011.
- Az első számjegy a jelet jelenti. Tehát a mi számunk pozitív.
- Ezután írja a következő (ebben az esetben) 8 számjegyet, és vonja le a torzítást. (10000011) ₂ = 131 → 131 - 127 = 4 → Tehát hátul van "⋅ 2⁴".
- Most írj egy "1" -et, majd az összes fennmaradó számot, valamint a "⋅ 2⁴" -t: 1.00100110011001100110011 11 2⋅
- Ezután mozgassa a vesszőt 4 helyre jobbra, hogy kihagyhassa a „⋅ 2⁴” -t: 10010.0110011001100110011
- Ezután a szokásos módon konvertálja az 10010-et egész számgá. 18 éves lesz.
- Most át kell konvertálnia a tizedesjegyeket. A vessző utáni első számjegy értéke 1: 2¹, a második számjegye 1: 2² és így tovább. Adja hozzá az értékeket, és a vessző előtti szám megadja a 18.3999996185302734375 számot.
A következő gyakorlati tippben megmutatjuk, hogyan lehet konvertálni az ASCII betűket bináris számokra.