30

-

31

c en effet la meilleur solution smile

32

-

33

Orion_ a écrit :
xt=(ox/zx)*65536; // Zoom Factor yt=(oy/zy)*65536;

Il faut multiplier avant et diviser après!
typedef unsigned long long u64;
xt=((u64)ox<<16)/zx;
yt=((u64)oy<<16)/zy;
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é

34

-

35

Orion_ a écrit :
u64 eek

Oui, il faut 48 bits minimum de précision pour les calculs intérmédiaires. sad
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é

36

D'ailleurs, les calculs sur 64 bits sont lents pour la plupart des plateformes (parce qu'elles sont des plateformes 16 ou 32 bits pour la plupart). sad (En particulier, la division est très lente sous TIGCC. La routine est déjà assez grosse comme ça.) Ce n'est pas aussi lent que les floats, évidemment, mais quand-même.

Tu peux travailler avec de la virgule fixe sur 16 bits si tu veux aller plus vite. (Ça te permet de travailler sur 32 bits pour les calculs intermédiaires lors des multiplications/divisions.)
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é

37

Y'a une solution intemediare:
xt = (ox*256)/(zx/256);
C'est pas de la magie, mais ca pourrait t'aider (En gros, on tronque lors de la division en nombre 16 bits).

38

Non seulement ce n'est pas précis (parce que tu tronques le diviseur), mais en plus ça ne marche pas avec ox supérieur à 256*65536 en représentation interne, c'est-à-dire supérieur à 256 en valeur réelle.
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é

39

PpHd
a écrit : C'est pas de la magie

40

-

41

bah ça te sert à quoi, puique tu perds ta précision... ?

42

-

43

-

44

Orion_ a écrit :
parceque la fonction cos de libmath est ultra lente ! je suis definitivement convaincu que tu c pas lire, ou alors tu t'exprime mal.
J'ai très bien compris l'intérêt d'utilier une table précalculée tête de chauve.
Je te demandais pourquoi tu fais le >>8 juste après avoir lu a valeur, puisque tu perds ainsi ta précision...

45

-

46

Bah oui, mais tu perds justement ta précision... Tu tronques la partie décimale (précieuse dans un cos...)

47

-

48

oui, mais faut faire le décalage pour le resultat final justement ...

49

Il a besoin d'un entier au final (apres xscale), donc c bon

50

moi j'avais un probleme avec mes virgules fixes...
comme orion ,j'avais un table des cos/sin precalculee,ke j'avai multiplie par 256(<<8)

je fesais mes calculs...(evidementje fesais pas la division par 256 tout de suite)

mais le probleme, ct dans les calculs,...
faut il multiplier toutes les valeurs par 256 (pour ke ca soit "homogene"??je pense ke oui
et komment on fait kan il y a des additions,lors de la division finale???...enfin c bizarre
avatar
Plus t'avance moins vite
Moins t'avance plus vite...

forums/406

51

-

52

C'est totalement inutile de faire un <<8 sur un nombre si tu fais une multiplication après...

53

et le truc ke tu calcul, tu l'a mis en long?
avatar
Plus t'avance moins vite
Moins t'avance plus vite...

forums/406

54

Orion> ta formule n'est pas bien.
fastsqrt te retourne quoi ? Un entier ou un nb à virgule fixe ?

55

-

56

oui, mais un long qui contient un entier ou bien un long qui contient un nb décimal ?

57

-

58

non.
Pour une addition ou une soustraction, c'est important, mais pas pour une multiplication ou une division

59

Orion_
a écrit : factor*cos(sqrt(x*x+y*y))/sqrt(x*x+y*y)
(factor*CosT[fastsqrt(x*x+y*y)])/(fastsqrt(x*x+y*y))
Essaie ça plutôt.

60

Enfin, ça te donnera un nombre à virgule fixe. fais un >>8 sur le résultat pour avoir la partie entière.