int duration
long valreference
float poidstarget
float poidslu
duration= ((((float)poidstarget-(float)poidslu)/1000)*valreference); // duration en milliseconde
si je print sur l ecran separement (((float)poidstarget-(float)poidslu)/1000) et valreference
j obtient bien les bonnes valeurs après avoir fait mes pesées sur ma balance et le reste du programme
si mon poids target est de 100gr, et que mon poidslu est de 10gr, et mon valreference de 60 000ms,
mon calcul duration est coherent et donne 5400ms soit 5.4seconde
par contre si je met 1000gr et toujours 10gr en pesée, et le meme valreference, le calcul de duratione st completement incoherent, il donne genre 7500ms par là hors il devrait en donner 54 000
donc comme je maitrise pas trop les long; float et int, peut etre que le soucis vient de la?
Les conversions de type (float) ne servent à rien puisque poidstarget et poidslu sont déjà des float.
En plus de déclarer :
long duration;
Il faut convertir le résultat de (poidstarget - poidslu) en long pour que la formule soit cohérente.
Le problème quand vous allez diviser par ex. 90 par 1000 est que cela va donner 0 en entiers.
Une solution est de diviser par 1000 à la fin, en forçant le compilateur avec des ().
duration= ((long)(poidstarget-poidslu)*valreference)/1000; // duration en milliseconde
On peut aussi écrire 2 lignes, où l'on est sûr de ce que l'on fait :
duration= (long)(poidstarget-poidslu)*valreference;
duration /= 1000; // duration en milliseconde
Je sais, c'est long et ch... mais la seule méthode pour résoudre un problème efficacement est de l'isoler. Au lieu de ça, tu es toujours à travailler avec ton code complet et ton problème n'est toujours pas résolu.
Donc, écris les 5 lignes strictes nécessaires pour mettre en évidence le problème et ce sera beaucoup plus facile de voir ce qui ne va pas.
A part ça, comme ça doit être mon jour de bonté, j'ai parcouru ton code en diagonale.
Ce truc là:
printf("%lu", duration);
c'est censé t'afficher duration quelque part ? Où ?