Kommagetal representeren in bin/hex/etc

Pagina: 1
Acties:
  • 2.818 views sinds 30-01-2008
  • Reageer

  • Maniakje
  • Registratie: Februari 2001
  • Laatst online: 20-01 20:20
Ik ben bezig voor school een klein programmaatje te schrijven dat om kan rekenen van ieder denkbaar talstelsel naar ieder denkbaar talstelsel. Nu is het de bedoeling dat het programma ook kan werken met kommagetallen (breuken dus).

Omrekenen van bijvoorbeeld binair naar hexadecimaal gebeurt via het decimale stelsel. Dus eerst rekent het programma het binaire getal om naar het tientallig stelsel, daarna wordt dat getal weer omgezet naar hexadecimaal.

Dit gaat allemaal als een trein, maar ik heb een probleem met de kommagetallen. Ik weet namelijk niet hoe ik die moet omrekenen van decimaal naar een ander talstelsel. Andersom (naar decimaal toe dus) is geen probleem. Na enig zoekwerk heb ik gevonden hoe ik dat moet doen naar het binaire stelsel (zie onderaan die pagina, Converting Decimal Fractions to Binary Reals), maar ik heb geen idee hoe ik dat nu zo kan 'veralgemeniseren' zodat het ook werkt voor andere talstelsels.

Ik zou al heel blij zijn met een voorbeeldje zoals op die pagina staat, maar dan van 10-tallig naar hexadecimaal. Als ik dat eenmaal heb kan ik het zelf wel zo aanpassen dat het ook werkt voor andere talstelsels, zoals bijvoorbeeld octaal. :)

Bij voorbaat dank. :)

The sentence below is true.
The sentence above is false.


  • Nappa
  • Registratie: Februari 2001
  • Laatst online: 03-04 17:10

Nappa

The Barbaric Saiya-jin!

Zoals ze helemaal onderaan de pagina laten zien, zo kun je het ook doen met bijvoorbeeld hexadecimalen.
Hierbij heb je dus na de komma 16-1, 16-2, enz.
Stel nu dat je het getal 0.34 decimaal wilt omzetten naar hexadecimaal.
Ten eerste kun je er 1/16 van af trekken: 0.34 - 0.0625 = 0.2775.
Dit kan nog een aantal keren zonder negatief te gaan:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 0.34
 0.0625 -
----------
 0.2775
 0.0625 -
----------
 0.215
 0.0625 -
----------
 0.1525
 0.0625 -
----------
 0.09
 0.0625 -
----------
 0.0275

Je hebt nu in totaal 5 maal 1/16 ervan af getrokken, verder kan het niet.
Je kunt nu echter nog wel een paar keer 1/256 ervan af trekken:
code:
1
2
3
4
 0.0275
 0.00390625
----------
 0.02359375

Dit kan totaal 7 keer voordat je de nul passeert.
Dit kun je net zolang doen als je wilt met 16-3 en verder, hangt ervan af hoe nauwkeurig je het wilt hebben.
Met twee decimalen (hexadecimalen?) precisie kom je op 0.57 hex.
Ga maar na, dit is 5*16-1 + 7*16-2 = 0,33984375.

/edit: Nog wat vergeten. Zit trouwens nog een rekenfoutje in maar het gaat om het principe ;)
/edit2: rekenfoutje al weggewerkt :)

[ Voor 14% gewijzigd door Nappa op 19-12-2002 19:09 ]

Alles wat ik zeg kan en zal tegen u gebruikt worden
Scream! Suffer! Panic! | Dark-future Dawnbringer | Unofficial Mordor community


  • Maniakje
  • Registratie: Februari 2001
  • Laatst online: 20-01 20:20
Ok, da's helemaal duidelijk. Ik had niet precies door hoe het nou precies zat, met meerdere keren dat 1/16 etc eraf trekken. Dat probleem doet zich bij binair namelijk niet voor. Achteraf gezien is het natuurlijk weer hartstikke logisch. :)

Nou ja, ik kan weer vooruit. :)

Bedankt! _/-\o_

The sentence below is true.
The sentence above is false.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04-04 03:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

dat aftrekken is natuurlijk een beetje onzin, vooral omdat je daar gewoon een deling voor kunt gebruiken :)

ik zal even je voorbeeldje aanhouden:
0.34 / 16-1 = 5.44, oftewel 5 rest 0.0275
0.0275 / 16-2 = 7.04, oftewel 7 rest 0.00015625
0.00015625 / 16-3 = 0.64, oftewel 0 rest 0.00015625
0.00015625 / 16-4 = 10.24, oftewel 10 rest een_klein_getal

0.34 in het decimale stelsel is dus 0.570a :)
niets anders dan gehele getallen dus

[ Voor 5% gewijzigd door .oisyn op 19-12-2002 20:24 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Nappa
  • Registratie: Februari 2001
  • Laatst online: 03-04 17:10

Nappa

The Barbaric Saiya-jin!

.oisyn schreef op 19 december 2002 @ 20:24:
dat aftrekken is natuurlijk een beetje onzin, vooral omdat je daar gewoon een deling voor kunt gebruiken :)

ik zal even je voorbeeldje aanhouden:
0.34 / 16-1 = 5.44, oftewel 5 rest 0.0275
0.0275 / 16-2 = 7.04, oftewel 7 rest 0.00015625
0.00015625 / 16-3 = 0.64, oftewel 0 rest 0.00015625
0.00015625 / 16-4 = 10.24, oftewel 10 rest een_klein_getal

0.34 in het decimale stelsel is dus 0.570a :)
niets anders dan gehele getallen dus
Natuurlijk, 't is precies hetzelfde, maar ik deed het even op de manier zoals op die pagina stond :). Maar dan nog, om dit te implementeren heb je sowieso een loop nodig om te testen, tenzij je eerst gaat vermenigvuldigen en dan de mod-operator gaat gebruiken.

edit: Oh nee laat maar, je kunt natuurlijk ook afronden... |:( ;)

[ Voor 5% gewijzigd door Nappa op 19-12-2002 21:36 ]

Alles wat ik zeg kan en zal tegen u gebruikt worden
Scream! Suffer! Panic! | Dark-future Dawnbringer | Unofficial Mordor community