Forums Développement Multimédia

Aller au contenu

Problème Calcul Delta

CODE PHP MySQL

1 réponse à ce sujet

#1 jean-marie.peyron

    Ceinture Blanche

  • Members
  • Pip
  • 4 messages

Posté 19 May 2009 - 22:51 PM

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

#2 t-servi.com

  • Members
  • PipPipPipPipPipPipPipPip
  • 765 messages

Posté 21 May 2009 - 13:45 PM

Salut,
Est-ce que tu peux expliquer le résultat que tu aimerais avoir?

Meilleures salutations.
Jean Tinguely Awais.
http://www.t-servi.com



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP