Problème d'arrondis ... [C, C++] - C++ - Programmation
Marsh Posté le 22-12-2002 à 16:49:55
Un peu de code (le coeur du traitement) et/ou exemple de données pourrait aider à saisir le problème..
Marsh Posté le 22-12-2002 à 17:01:37
pour tester l'égalité avec des flottants, il faut toujours tester avec une marge :
#define epsilon 1e-5
float n = 4;
float f = tonCalcul();
if (f == n) // MAL
if (fabs(f -n) < epsilon) // OK
//
si tu veux de la précision '100%', tu devrais utiliser une classe qui représente les nombres symboliquement (par ex, racine de 2 divisé par 144)
Marsh Posté le 22-12-2002 à 19:13:06
j'ai essayé en mettant que des "long double" et ça a rien changé ...
pour les classes on a pas encore appris
Marsh Posté le 22-12-2002 à 20:00:21
vi désolé fallait manger ...
bon ben je vous balance la coupable : ma fonction de résolution des équations du second degré ...
Code :
|
Voilà
Marsh Posté le 22-12-2002 à 20:02:58
freeman_78 a écrit : if (discr == 0) |
et voilà ... à remplacer par un test avec marge, comme dit plus haut.
Marsh Posté le 22-12-2002 à 20:24:47
oki alors je vais essayer ça
merci !!
Marsh Posté le 22-12-2002 à 20:48:23
la déclaration de discr a été "éludée" pour être plus clair ?
Y en a qui préfèrent préciser le caractère double ou float des "constantes" en mettant 0.0 et 2.0, mais d'autres disent que le compilateur est assez doué pour comprendre... sinon 0 serait int, 2 aussi.
Marsh Posté le 22-12-2002 à 20:48:30
youdontcare a écrit : pour tester l'égalité avec des flottants, il faut toujours tester avec une marge : |
Code :
|
Marsh Posté le 22-12-2002 à 23:51:00
Merci à tous ! voilà ce que j'ai fait et qui fonctionne :
Code :
|
Marsh Posté le 23-12-2002 à 09:16:58
Reply
Marsh Posté le 22-12-2002 à 16:34:19
Bonjour !
Voilà pour un programme de résolution du troisième degré je passe par une fonction qui résoud des équations du second degré...
Mais j'ai un problème
Lorsque les valeurs traitées pas ma fonction qui résout le second degré sont assez proche de 0, le programme fonctionne mal. Au lieu de me renvoyer une racine réelle double, il me renvoit 2 racines réelles mais très peu défférentes (elles diffèrent à partir de 10^-5 environ). Du coup, ça ne va pas dans le bon cas dans la fonction qui résoud le troisième degré et ça ne fait pas ce qu'il faudrait.
Si quelqu'un pouvait m'aider pour ces galères d'arrondis, ce serait sympa !!
J'utilise uniquement des variables de type double.
Je ne mets pas de code, mais si vous voulez en voir une partie, pas de problème ...
Voilà, merci d'avance ! et bon dimanche