Az `a` szám megmondja, hogy hányas alapban járunk.
A `t` azt mutatja, hogy az adott alapú számrendszerben hány számjegyet tudunk még eltárolni (ez példával sokkal érthetőbb).
A `k_-` és `k_+` számok azt mutatják, hogy mennyi lehet a minimum és a maximum kitevője az alapnak.
Ez kicsit olyan, mint a normál alak, csak a szám, amivel szorzol az 1-nél kisebb. Ha veszed mondjuk a `10^5*0.4539`, akkor az úgy néz ki ilyen felírásban, hogy
`text( ) 0 text( ) 5 text( ) 4 text ( ) 5 text( ) 3 text( ) 9`
`text(előjel )10^x \qquad x*10^(-1) \qquad x*10^(-2) \qquad x*10^(-3) \qquad x*10^(-4)`
(itt `k_(-) = 0`, ez fontos lesz)
Ha a 10-et mindenhol helyettesíted az alappal, megkapod ezt akármilyen számrendszerre.
A te számod valahogy úgy fog kinézni, hogy
`abcdefgh`
ami annyit tesz, hogy
`text(előjel)*2^(bcd)*(e*2^(-1)+f*2^(-2)+g*2^(-3)+h*2^(-4)`)
`a` az előjel-bited (ha 0, akkor pozitív, a 1, akkor negatív a szám)
`bcd` a kitevőd+3. Mivel a kitevő legkisebb értéke -3, a legnagyobb pedig 3, a kitevő 7 értéket vehet fel. Ezt legkevesebb 3 bitben tudod eltárolni.
`000 -> -3`
`001 -> -2`
`011 -> 0`
`110 -> 3`
Ezen kívül még 4 bited lesz, mivel `t=4`.
Ez a szám ugye akkor lesz a legnagyobb, ha
1, pozitív
2, a lehető legnagyobb kitevőre emelem az alapos szorzótényezőt
3, az érték is a lehető legnagyobb. Mivel összeadás van ezek között, ez akkor lesz a legnagyobb, amikor minden egyes tag a legnagyobb.
1) `->a=0`
2) `->k=3->bcd=110`
3) `->efgh=1111`
Az így kapott szám `01101111`, ami
`(+1)*2^3+(1*2^(-1)+1*2^(-2)+1*2^(-3)+1*2^(-4))=15/2=7.5`
A visszafele konvertálás már érdekesebb. A számod most 0.8. Ezt az 5. helyi értékig kell kiszámolni 2-es számrendszerben, mivel az 5. hely alapján kerekítesz a 4.-re.
`a=0`, mert a szám pozitív.
`bcd=011`, mivel az `efgh` rész fel tud írni számokat 0-tól `le1`-ig. Ez alapján 1-gyel kell szorozni, ami `2^0`, tehát `k=0 ->bcd=011`
Mivel nem tudom a tört átalakítására a "formális" módszert, maradok a számolgatásnál. Ha kisebb lesz 0-nál az eredmény, akkor a bit 0, egyébként a bit 1. Ha pont 0 jönne ki, akkor megvan a pontos érték.
`e=1`, mivel `0.8-2^(-1)=0.3`
`f=1`, mivel `0.3-2^(-2)=0.05`
`g=0`, mivel `0.05-2^(-3)=-0.075`
`h=0`, mivel `0.05-2^(-4)=-0.0125`
`i=1`, mivel `0.05-2^(-5)=0.01875`
Ebből `text(efghi)=11001`.
`efgh` szabályosan kerekített értéke `1101`
`efgh` levágással kerekített értéke `1100`
Itt vannak a linkek, ami alapján megértettem, hogy mit is kéne itt csinálni:
http://progmat.uw.hu/oktseg/numanal/numanal1/na1_szamabr.pdf
^ 5. oldal példája
https://gyires.inf.unideb.hu/GyBITT/31/ch05s05.html
https://hu.wikipedia.org/wiki/Lebeg%C5%91pontos_sz%C3%A1m%C3%A1br%C3%A1zol%C3%A1s#Kerek%C3%ADt%C3%A9s._Kerek%C3%ADt%C3%A9si_hiba
Itt egy decimális-bináris átalakító, ami törtet is tud váltani. Ezzel ellenőriztem magam.
https://www.rapidtables.com/convert/number/decimal-to-binary.html