1

-

2

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
avatar

3

Pourquoi tu te prends la tête à essayer de coder un truc correctement ?
TIGCC supporte les floats sans que tu n'aies à coder quoi que ce soit...roll

Bon, plus sérieusement, voici une réponse possible pour ton morceau de code :
unsigned long i;
unsigned short j;
for(i=0 ; i<320<<16 ; i+=1.2<<16)
 j=i>>16, buffer[j]=buffer2[j];
Mais en fait, le 1.2<<16, je doute qu'il soit supporté par TIGCC, si ce n'est pas le cas, tu mets i+=78643

4

-

5

moi j'avais fait une macro
#define FIX(x) (long) (x* 65536)
peux faire FIX(1.2)<<16comme ca tu
avatar

6

-

7

-

8

heu, oui, pardon...
j'ai pas fait gaffe a ce que ca devait faire le <<16 grin
(en fait, je n'ai pas trop regardé ce que devait faire ton code grin)

fais juste i+=FIX(1.2) grin
avatar

9

-

10

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

11

j'ai vérifié, c'est calculé par le preprocesseur smile
avatar

12

Orion_ a écrit :
une question, FIX(4) par exemple sir FIX =
#define FIX(a) (long)(a<<16)

le macroprocesseur va remplacer sa par: 4<<16 mais est ce qu'il va laisser le proc effectuer l'operation ou directement effectuer lui même ? (avec un << je parle)
est il preferable de mettre un *65536 dans ce cas ?

EDIT: remarque dans n'importe kel cas, si il effectue, le << ne sert a rien en rapidité triso
C'est surtout que 1.2<<n n'est peut-être pas supporté par TIGCC, don il vaut mieux mettre *2^n que TIGCC optimisera en décalage quand il pourra.

13

-

14

-

15

non, puisque c'est précalculé (c'est une constante), ca ne changera rien
mais le <<, ne marchera ptet pas, c'est sur
avatar

16

a)*65536)Tu mets #define FIX(a) (long)(( (le truc d'azrty83 quoi)

17

-

18

azerty83 a écrit :
j'ai vérifié, c'est calculé par le preprocesseur smile

C'est calculé par le compilateur, mais dans le "constant folder", pas dans le préprocesseur.

Et le <<16 ne marche pas sur un nombre à virgule flottante. Ça n'a aucun sens. D'autant plus que les floats sur TI-89/92+/V200 ne sont même pas représentés en binaire, mais en décimal codé binaire (DCB/BCD).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

19

-

20

-

21

pkoi utiliser des floats pour garder le resultat ?

22

-

23

((float)(ox/oy))*65536 ?

24

-

25

avec une autre variable float alors ...
float fX = 0.0;
...
fX = (float)ox/oy;
fX *= 65536f;
nb = (ushort)fX;

?

26

-

27

c zarb ton truc ... t'as pas un probleme sur tes valeurs ox et oy ?

28

-

29

pareil smile

30

-