Big Endian -tavujärjestys on tuttu ja turvallinen esitystapa jossa merkitsevin tavu on vasemmalla ja vähiten merkitsevä oikealla. Aivan kuten kymmenjärjestelmän luvuissa, joissa esimerkiksi luvussa 197 merkitsevin osa on sataset, toiseksi merkitsevin osa kymmenet ja vähiten merkitseviä on ykköset. Tässä ei käsitellä enempää tavujärjestystä vaan oletetaan se tunnetuksi.
Oletetaan myös että lukija on tutustunut sen jonkin verran binäärilukuihin sekä siihen mikä yleisesti ottaen on IEEE 32-bittinen liukuluku. Tässä esitetään algoritmi desimaaliluvun muuntamisesta IEEE-liukuluvuksi. Erikoistapausta (eksponentti vakiolisäysmuodossa 0 ja piilobitti poikkeuksellisesti 0) ei käsitellä eikä myöskään alle yhden suuruisia desimaalilukuja.
Esitetään desimaaliluvun muuntaminen IEEE-liukuluvuksi esimerkin avulla.
Muunnetaan desimaaliluku -50,8125 liukuluvuksi.
IEEE-liukuluvussa ensimmäinen bitti vasemmalta ilmaisee merkin. Positiivista lukua ilmaisee luku 0, sillä (-1)0 = 1. Negatiivista lukua ilmaisee luku 1, sillä (-1)1 = -1.
Luku -50,8125 on negatiivinen, joten etumerkiksi tulee 1. Ensimmäinen osa liukulukuesitystä on selvitetty 🤓.
Muunnetaan desimaaliluvun 50,8125 kokonaislukuosa 50 binääriluvuksi.
Jaettava | Jakaja | Tulos | Jakojäännös | Monesko bitti | |||
---|---|---|---|---|---|---|---|
50 | : | 2 | = | 25 | 0 |
Viimeinen bitti (oikeanpuoleisin bitti) | |
25 | : | 2 | = | 12 | 1 |
Toiseksi viimeisin bitti | |
12 | : | 2 | = | 6 | 0 |
Kolmanneksi viimeisin bitti | |
6 | : | 2 | = | 3 | 0 |
Neljänneksi viimeisin bitti | |
3 | : | 2 | = | 1 | 1 |
Viidenneksi viimeisin bitti | |
1 | : | 2 | = | 0 | 1 |
Kuudenneksi viimeisin bitti (vasemmanpuoleisin bitti) |
Saimme lopulta jakolaskun tulokseksi 0. Nyt haluttu binääriluku saadaan valitsemalla jakojäännökset alhaalta ylös luettuna.
Siten 50 = 1100102.
Alaviitteellä 2 voi osoittaa, että kyse on 2-kantaisesta luvusta eli binääriluvusta. Sitä ei ole välttämätöntä kirjoittaa, mutta sen käyttäminen voi helpottaa näkemään että on kyse binääriluvusta.
Muunnetaan desimaaliluvun 50,8125 desimaaliosa (eli pilkun oikealla puolella oleva osa) binääriosaksi.
Kerrottava | Kertoja | Kokonaisosa = bitti | Desimaaliosan esitys | |||
---|---|---|---|---|---|---|
0,8125 | * | 2 | = | 1 |
+ | 0,625 |
0,625 | * | 2 | = | 1 |
+ | 0,250 |
0,250 | * | 2 | = | 0 |
+ | 0,500 |
0,500 | * | 2 | = | 1 |
+ | 0,000 |
Saimme lopulta kertolaskun tuloksen desimaaliosan esitykseksi 0, joten binääriosan laskeminen on valmis. Nyt haluttu binääriosa on kokonaisosat ylhäältä alas luettuna.
Siten desimaaliosa ,8125 on 11012.
Tässä tapauksessa saimme äärellisen pituisen binääriosan. Jos desimaaliosa olisi esimerkiksi luvusta 1,20, niin binääriosa olisi päättymätön. Tällöin binääriosaa lasketaan vain siihen saakka mitä on mahdollista saada mahtumaan liukulukuun.
Yhdistetään kohdassa 2 muunnettu kokonaisosa 50 = 1100102 ja binääriosa ,8125 on 11012.
Saadaan 110010.11012.
Eksponentti saadaan laskemalla kuinka paljon binääripistettä tulee siirtää jotta binääriesityksen ensimmäisen 1-bitin oikealle puolelle tulee piste. Koska meillä on luku 110010.1101, on siirrettävä pistettä 5 bittiä vasemmalle. Binääripisteen vasemmalle siirtäminen vastaa kahdella kertomista siirtojen määrän verran. Siis:
110010.1101 = 1.100101101 * 25.
Pistettä siirrettiin 5 pistettä vasemmalle jolloin saimme luvun muotoon 1.100101101 * 25. Luku 5 on haluamamme eksponentti.
Samalla saadaan määriteltyä mantissa luvusta 1.100101101. Palataan siihen kuitenkin alempana.
Tämä tapahtuu helposti. Eksponenttiin 5 lisätään luku 127, jolloin saadaan luku 132.
Muunnetaan saatu luku 132 binääriluvuksi:
Jaettava | Jakaja | Tulos | Jakojäännös | Monesko bitti | |||
---|---|---|---|---|---|---|---|
132 | : | 2 | = | 66 | 0 |
Viimeinen bitti (oikeanpuoleisin bitti) | |
66 | : | 2 | = | 33 | 0 |
Toiseksi viimeisin bitti | |
33 | : | 2 | = | 16 | 1 |
Kolmanneksi viimeisin bitti | |
16 | : | 2 | = | 8 | 0 |
Neljänneksi viimeisin bitti | |
8 | : | 2 | = | 4 | 0 |
Viidenneksi viimeisin bitti | |
4 | : | 2 | = | 2 | 0 |
Kuudenneksi viimeisin bitti | |
2 | : | 2 | = | 1 | 0 |
Seitsemänneksi viimeisin bitti | |
1 | : | 2 | = | 0 | 1 |
Kahdeksanneksi viimeisin bitti (vasemmanpuoleisin bitti) |
Koska saimme jakolaskun tulokseksi 0, olemme valmiit. Haluttu binääriluku on jakojäännökset alhaalta ylös lukien eli 100001002.
Olemme saaneet toisen osan eli eksponentin liukulukuesitystä varten 😎.
Tämä on myös nyt helppoa. Yllä eksponenttia selvittäessä on jo muunnettu binääriesitys 110010.1101 muotoon 1.100101101 * 25.
Koska IEEE-liukulukustandardissa käytetään piilobittiä, eli mantissan ensimmäinen osa oletetaan luvuksi 1, sitä ei tarvitse merkitä mantissaan. Binääriesitys on muodossa 1.100101101. Nyt pisteen vasemmalla puolella on bitti, jota ei laiteta mantissaan.
Piilobitti on IEEE-liukuluvussa binääripisteen vasemmalla puolella oleva bitti 1, jonka oletetaan olevan 1, joten sitä ei tarvitse merkitä. Piilobitin ansiosta voidaan ilmaista luku tarkemmin.
Mantissan pituus on 23 bittiä. Se alkaa tuosta binääripisteen oikealta puolen ja loppuosa täytetään nollilla. Mantissa on siten tässä tapauksessa 10010110100000000000000
.
Yllä on jo määritetty kaikki liukuluvun osat ja tässä ne nyt yhdistetään 💞.
+ vai - | Eksponentti 8 bittiä | Mantissa 23 bittiä |
---|---|---|
1 |
10000100 |
10010110100000000000000 |
Joten luku -50,8125 on IEEE 32-bittisenä liukulukuna 1100 0010 0100 1011 0100 0000 0000 0000
Kannattaa harjoitella näitä muutoksia eri luvuilla. Muunna esimerkiksi nämä luvut 2,5 ja 4,125 IEEE 32-bittiseksi liukuluvuksi. On myös mielenkiintoista muuntaa liukuluvuksi luku jonka desimaaliosa ei ole täsmälleen kahden potenssien summa, esimerkiksi luku 5,1.