Zeph Le 20/03/2002 à 17:57 alors les types :
tbl_anm (renommé en anm) : unsigned int *
var_for (renommé en x) : unsigned int
var_mul (renommé en mul) : unsigned int

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
tu dis utiliser des unsigned int...
or, tu affiche tout en considérant que c'est des int signed.
(%d => signed int)
il faudrait mettre %du je penses pr unsigned int
unsigne int et signed int ne sont pas considéré pareil !!!
(utilises short plutôt que int, d'ailleurs, si tu veux des vars codées sur 2 octets... partce que int est vague)
le bit de poids fort a une signification différente si c signed ou unsigned...
si c unsigned, le bit de poids fort compte ds le nombre
sinon, il indique le signe (en gros, technique du complément à deux)
Alors c'est simple : c'est à cause de la division et de la multiplication : il faut savoir que ces deux opérations traitent les données différemment suivant qu'elles soient signées ou non. Tu as déclaré tes variables comme non-signées. Or, la première opération effectuée dans ton code (soustraction) renvoie un résultat négatif (signé) !
Le compilateur, lui, il va demander au processeur de diviser et multiplier en considérant les données comme non-signées puisque les variables sont non-signées... Comme en fait ce qu'il divise et multiplie est négatif (à cause de la première opération), le résultat est faux !
Deux solutions :
- le transtypage : temp= ((mul * (int)(anm[x+5] - anm[x])) / 100)
- déclarer les variables comme étant signées : int var_for, var_mul, *tbl_anm
[edit]Edité par Thibaut le 20-03-2002 à 18:37:13[/edit]

Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 :
www.ti-fr.com.
Quelques idées personnelles
ici.
Bon, enfin, ça doit être question de cast...
les unsigned doivent être transformés en sgned, ou le contraire...
temp=((mul*(anm[x+5]-anm[x]))/100);
temp, c quel type ?
mul : Unsigned int
anm = unsigned int
x : unsigned int
sous TIGCC, avec les options par défaut, int == short
mais ce n'est pas le cas sous d'autres compilo...
même, sous TIGCC, il est possible que int == long si on met l'option -mforceint ou -mlong, ou un truc comme ça....
=> mettre short assure une certains sécurité.
la norme ANSI dit uniquement ceci :
char <= short <= int <= long
(idem pr unsigned)
oué, g essayé... dsl de pas avoir fait mieux.
ce quelque chose entre int et short ne te servira pas souvent (voire même jamais) sous TIGCC, mais il peut te servir si tu codes sur une autre machine.
Par exemple, sur les PC 32 bits (le tien en fait partie), les ints sont généralement de 32 bits => 2x plus que sous TIGCC
sous MSVisualC++6.0, les int correspondent à des long. (je crois bien !)
en fait, int correspond généralement à la taille d'un entier sur la machine de destination.
Sur un PIII, qui est un processeur 32 bits, ça sera 32 boits
sur un M68k, qui est un proc 16 bits (32 en interne, mais proc 16 bits qd même), ça sera 16 bits
DE FACON STANDARD... après, les standard se contournent
Bob64> fait la avec la routine de HLine qu'avait donné jackiechan[...] dans un topic pr lolo ...
Zeph Le 20/03/2002 à 22:11 nEUrOne > Si je fais un rectangle moi même ac cette routine ça ira + vite que le DrawClipRect du TiOS ???

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
jcop Le 21/03/2002 à 23:01 Miles > la bible des compilateurs, il est pas nommé le "dragon" ? (Alfred aho, Ravi Sethi, Jeffrey Ullman)
si c'est ça je ne pense pas que thibaut puisse en tirer grand chose !