|
|
|
|
Bonjour
je réalise une petit programme en C ANSI avec des chiffres avec 30 chiffres après la virgule maximum.
J'aimerais faire des comparaisons entre mes chiffres apres les calculs mais le problème est que jai une perte de précision engendrant des comparaison d'égalité FAUSSE/
Comment résoudre cela?
On m'a parlé d'epsilon.. mais cela ne fonctionne pas ou lutot je ne sais comment lutiliser.
Merci d'avance/
Configuration: OS: WIN XP SP2 & BUNTU BREEZY EDI: Dev cpp & Ajanta sous LINUX. Compilation: gcc -wall -ansi
Salut.
|
Rappelons d'abord que le C ne manipule pas des "chiffres" mais des "nombres" (entiers ou réels) comme indiqués sur cette page :
if ( a >= b - epsilon && a <= b + epsilon ) ...qui considère que les nombres a et b sont identiques à epsilon près (à définir en fonction des besoins). |
Bonjour
Dans le cas qui nous concerne, la solution peut être simplement de la forme : if ( a >= b - epsilon && a <= b + epsilon ) ... qui considère que les nombres a et b sont identiques à epsilon près (à définir en fonction des besoins). Justement TOUT EST LA mon probleme: [b]comment déterminer JUDICIEUSEMENT le FAMEUS EPSILON? [/b]Quelle méthode utilisée? car jai déja essayé est selon lepsilon le truc est FAUX ou JUSTE. Ajanta est un environnement développé du genre devcpp sous Linux MAIS etrangement je ne le trouve pas sur GOOGLE? viré de leur BD? en tout cas je lui eu sur synaptic depuis ubuntu. mais Ajanat est vraiment pas mal pour un Habtiué a Devcpp. Si tu le veux vraiment je dois revoir chez moi l'adresse de leur site. |
La méthode consistant à convertir les résultats en chaînes, pour ensuite comparer ces chaînes, est sûrement un très mauvaise méthode : coûteuse en temps de traitement, et pas plus efficace quant au résultat espéré (l'emploi de "epsilon" est simplement remplacé par un nombre de chiffres pour la comparaison).
|
Ajanta m'interesse, je ne trouve pas d'editeur à la fois simple et complet comme devCpp sous Linux. J'ai essayer VIDE, mais je n'en suis pas totalement satisfait. Donc si tu retombe sur ton lien...
|
J'ai 4 points donnés.Je simplifie volontairement le code sans montrer les structures utilisés et les points sont farfelus.
|
Oublie HS
|
Merci pour le lien, je vais essayer ce logiciel.
|
Déjà utilise des doubles, plus précis que les floats.
double a, b; /* ... */ if (a == b) /* HORREUR ! */ /* ... */ on écrira : #include <math.h> /* ... */ double a, b; /* ... */ if (fabs (a - b) <= epsilon * fabs (a) ) /* ... */ où l'on aura judicieusement choisi epsilon (non-nul !). |