Problème bizarre de calcul

Problème bizarre de calcul

by Tobia Rune Sigurd Fjellman -
Number of replies: 6

Bonjour,

J'ai un problème dont je n'arrive pas à comprendre la nature. Pour éviter de publier du code sur le forum je me limiterait à donner un exemple fictif pour illustrer le problème.

On peut rapprocher ce qui se passe dans mon programme à la situation suivante (ou x et y sont des doubles déclarés et initialisés autre part) :

double var1(x);
double var2(x + y);
double resultat1(0);
double resultat2(0);

resultat1 = calcul() + (var1 + y);
resultat2 = calcul() + var2;

//et on a (resultat1 != resultat2)

Je ne comprend pas pourquoi l'on a pas égalité entre les deux résultats.

In reply to Tobia Rune Sigurd Fjellman

Re: Problème bizarre de calcul

by Josué Antoine Maechling -

En effet ça peut paraître surprenant.

Est-ce que tu as essayé d'afficher les deux résultats pour voir ?

Ou tu as seulement testé le != avec c++ ?

ça pourrait arriver éventuellement (à prendre avec des pincettes) je pense avec des erreurs d'arrondis quand on manipule des nombres qui sont très différents (en ordre de grandeur).

In reply to Josué Antoine Maechling

Re: Problème bizarre de calcul

by Tobia Rune Sigurd Fjellman -

En fait je m'en suis rendu compte en affichant les nombres. La différence est trop importante pour que ça soit du à l'arrondi je crois.

In reply to Tobia Rune Sigurd Fjellman

Re: Problème bizarre de calcul

by Tobia Rune Sigurd Fjellman -
Ou plutôt, en faisant le même calcul avec ces deux nombres je n’obtiens pas le même résultat du tout.
Quand je les affiches l'un à coté de l'autre le résultat est le même, le problème émerge lorsque je substitue l'un pour l'autre dans mon calcul (en faisant très attention à ne rien modifier d'autre).
Merci déjà pour la première réponse.
In reply to Tobia Rune Sigurd Fjellman

Re: Problème bizarre de calcul

by Josué Antoine Maechling -

Peux-tu donner ces valeurs ? (toutes les valeurs qu'on utilise, x, y, var1, var2, resultat1, resultat2)

Aussi tu peux essayer en faisant l'addition en commençant par le terme le plus petit jusqu'au terme le plus grand, pour les deux résultats (mathématiquement ça ne change rien mais pour l'ordinateur si)

In reply to Josué Antoine Maechling

Re: Problème bizarre de calcul

by Roman Eugène Michel Stemplowski -

Bonjour,

Mon binôme et moi avons finalement trouvé l'erreur : il s'agissait d'un oublie dans le constructeur de copie de la classe dans laquelle intervenait les deux quantités liées. En effet l'une d'elle avait été introduite plus tardivement que l'autre et le constructeur de copie n'avait pas été adapté, ce qui était problématique car seul une copie de l'objet est utilisée.