Se connecter / S'enregistrer
Votre question

Problème de calcul de Delta

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
19 Mai 2009 18:18:05

Bonjour,

J'ai un bug que je n'arrive pas à corriger car ce n'est pas mon code à la base.

Voilà le problème :

J'ai un opérateur Delta qui calcule la différence entre 2 valeurs consécutives d'un paramètre FRAME qui incrémente de 1 à chaque fois.
Le problème est que si je calcule le résultat des 2 paramètres a et b :
A = (+ (DELTA FRAME) (DELTA FRAME)(DELTA FRAME))
B = (DELTA (+ FRAME FRAME FRAME))

Le problème est que lorsque je lance mon programme :

J'obtient :
FRAME=0 ; a=X ; b=X puis
FRAME=1 ; a=X ; b=3 puis
FRAME=2 ; a=X ; b=3 puis
FRAME=3 ; a=3 ; b=3

La question est : Pourquoi l'écriture du paramètre A a besoin de 3 incrémentations du FRAME pour donner un résultat alors que le paramètre B non ?


Voilà le code en question:

double Delta::evalue(DecomBoolean temps_reel, unsigned char& erreur)
{
double valeur;
double result = 0;

valeur= argument->evalue(temps_reel, erreur);
/* on sélectionne les variables concernées */
if (IsRealTime(temps_reel))
traitement_d(ancienne_erreur, ancienne_valeur, valeur, result, erreur);
else
traitement_d(ancienne_erreurdiff, ancienne_valeurdiff, valeur, result, erreur);
return result;
}


void traitement_d(int& une_erreur, double& une_valeur, double& valeur, double& result, unsigned char& erreur)
{
if (erreur == 0)
{
if (une_erreur == 0)
/* si il n'y a pas d'erreur cette fois ci et la fois précédente */
result = valeur - une_valeur;
else
{
/* si le traitement précédent était invalide */
une_erreur= 0;
erreur= 1;
}
une_valeur= valeur;
}
else
une_erreur= 1;
}


void calcule(unsigned char& erreur, TArbre p, double& resultat, double temp, DecomBoolean temps_reel)
{
if (erreur == 0)
{
temp= p->evalue(temps_reel, erreur);
if (erreur == WITHOUT_ERROR)
resultat= resultat + temp;
else
resultat= 0;
}
}

const char *Somme::ClassName()
{return "TSomme";}


double Somme::evalue(DecomBoolean temps_reel, unsigned char& erreur)
{
double resultat;
double temp=0;
int i;
double result = 0;

resultat= 0;

for (i= 0;(i <= (arguments->Count - 1));i++)
calcule(erreur, TArbre(arguments->items(i)), resultat, temp, temps_reel);
if (erreur == WITHOUT_ERROR)
result= resultat;
else
result= 0;

return result;
}

Merci bien d'avance pour toute l'aide que vous pouvez m'apporter

Autres pages sur : probleme calcul delta

19 Mai 2009 21:32:20

Je pense que tu incrémentes les deux valeurs en même temps! Donc, je pense que la valeur A ne donne rien, tant qu'il n'a pas rejoint la valeur B!

Il faudrait que tu puisses donner les deux valeurs à un temps différent!
m
0
l
19 Mai 2009 23:41:02

Non car quand je calcule la valeur A seule ou la valeur B seule j'obtiens la même chose
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS