Ik heb af en toe wat problemen met doubles (of floats? wat is nou het verschil?). Vandaar dat ik er aan dacht om een reeël getal (123,45) in een int te representeren. Nu heb ik twee dingen bedacht:
1. Met bitmasks werken, dus de eerste 16 bits geven het character (hele getal) aan en de laatste 16 bits de mantissa (achter de komma):
2. Met miljoentallen werken. 25,36 wordt dan 25360000
Manier 1 is sneller, met manier 2 is het makkelijker rekenen. Het probleem is nu dat als je REAL_CONS(12,34) doet je niet 12340000 krijgt maar 12000034. Dat is natuurlijk niet de bedoeling. Hoe maak ik een functie dit dit oplost en alle getallen met 10, 100, 1000 etc. vermenigvuldigd tot het uit 6 cijfers bestaat?
1. Met bitmasks werken, dus de eerste 16 bits geven het character (hele getal) aan en de laatste 16 bits de mantissa (achter de komma):
C:
1
2
3
| #define REAL_CONS(c, m) (c<<16 | m) #define REAL_CHAR(r) (r>>16) #define REAL_MANT(r) (r & 0xffff) |
2. Met miljoentallen werken. 25,36 wordt dan 25360000
C:
1
2
3
| #define REAL_CONS(c, m) (c*1000000+m) #define REAL_CHAR(r) (r/1000000) #define REAL_MANT(r) (r%1000000) |
Manier 1 is sneller, met manier 2 is het makkelijker rekenen. Het probleem is nu dat als je REAL_CONS(12,34) doet je niet 12340000 krijgt maar 12000034. Dat is natuurlijk niet de bedoeling. Hoe maak ik een functie dit dit oplost en alle getallen met 10, 100, 1000 etc. vermenigvuldigd tot het uit 6 cijfers bestaat?