aze Le 23/06/2003 à 12:58 bah, en fait, un nb virgule fixe, c'est un nombre qui est stocké en memoire multiplié par une constante superieure a 1
en gros, tu as un entier, sur lequel tu place une virgule imaginaire
je m'explique : par exemple si on travaille sur un long dont le 1er mot est la partie entiere er le 2eme mot est la partie "fractionnaire", pour stoquer 1, ca donnerait 0x00010000 (lire 0x0001,0000)
pour 0.5 : 0x0008000
on place imaginairement la virgule entre les 2 mots
mais tu peux la placer ailleurs, ca depend de la precision que tu veux
ensuite pour les additions et soustraction, ca ne change absolument rien, mais pour la multiplication et la division, tu dois faire tes propres routines
aze Le 23/06/2003 à 13:05 moi j'avais fait une macro
#define FIX(x) (long) (x* 65536)
peux faire FIX(1.2)<<16comme ca tu
Si tu mets une valeur et non une variable, le compilo va faire le calcul lui-même, que tu mettes <<n ou *2^n
aze Le 23/06/2003 à 13:45 non, puisque c'est précalculé (c'est une constante), ca ne changera rien
mais le <<, ne marchera ptet pas, c'est sur
a)*65536)Tu mets #define FIX(a) (long)(( (le truc d'azrty83 quoi)
pkoi utiliser des floats pour garder le resultat ?
avec une autre variable float alors ...
float fX = 0.0;
...
fX = (float)ox/oy;
fX *= 65536f;
nb = (ushort)fX;
?
c zarb ton truc ... t'as pas un probleme sur tes valeurs ox et oy ?