Incrémentation de float [Résolu]

Messages postés
35
Date d'inscription
samedi 14 mai 2005
Dernière intervention
4 novembre 2010
- 1 août 2008 à 01:35 - Dernière réponse :
Messages postés
35
Date d'inscription
samedi 14 mai 2005
Dernière intervention
4 novembre 2010
- 1 août 2008 à 14:23
Bonjour tout le monde, voici mon probleme c'est surement assez débile mais je n'arrive pas a trouver comment faire, voici mon code :
main(){
       float i, j;
       printf("%f\n", g);
       i=0;
       scanf("%f", &j);
       while(i<5){
                  printf("%f, %f\n", i, j);
                  if(i==j){
                           printf("%f", i);
                           }
                           i=i+0.1;
                           }
       Sleep(20000);
       }
Le probleme c'est que i devrait prendre les valeurs 0; 0.1; ......; 4.9; 5 alors que en fait dans mon programme il n'a pas de valeur precise par exemple quand i devrait etre egale a 4.9, il est en fait egale a 4.899998.
Comment résoudre ce probleme merci d'avance.
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
968
Date d'inscription
samedi 3 avril 2004
Dernière intervention
4 mars 2010
- 1 août 2008 à 14:11
3
Merci
les nombres flottants sont d'une précision limitée; ainsi il ne faut jamais écrire d'égalité, mais vérifier que, par exemple, la différence entre deux nombres est inférieurs à une valeur d'erreur limite :

#define EPSILON (0.00001)
__int32

_CheckEquals(
double a,
double b)
{

double diff=a-b;
*(
__int64*)&diff&=0x7FFFFFFFFFFFFFFF; // valeur absolue

return (diff<EPSILON)?1:0;
}

Merci cs_juju12 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de cs_juju12
Messages postés
35
Date d'inscription
samedi 14 mai 2005
Dernière intervention
4 novembre 2010
- 1 août 2008 à 01:36
0
Merci
arf oubliez la ligne printf("%f\n", g);
elle est en trop ^^
Commenter la réponse de hacker_mt
Messages postés
180
Date d'inscription
mercredi 22 décembre 2004
Dernière intervention
16 août 2012
- 1 août 2008 à 07:37
0
Merci
Déclare i en double.
Commenter la réponse de cs_Lucky92
Messages postés
35
Date d'inscription
samedi 14 mai 2005
Dernière intervention
4 novembre 2010
- 1 août 2008 à 13:19
0
Merci
Merci maintenant la valeur de i est precise reste encore un probleme :
le if(i==j) ne fonctionne pas !?!?
Commenter la réponse de hacker_mt
Messages postés
180
Date d'inscription
mercredi 22 décembre 2004
Dernière intervention
16 août 2012
- 1 août 2008 à 14:15
0
Merci
Il ne faut jamais utiliser l'opérateur == pour comparer des flottants.

#include <limits>
#include <cmath>
using namespace std;
...
const double eps = numeric_limits<double>::epsilon();
...
if ( abs( i - j ) < eps )
{
...
}
Commenter la réponse de cs_Lucky92
Messages postés
35
Date d'inscription
samedi 14 mai 2005
Dernière intervention
4 novembre 2010
- 1 août 2008 à 14:23
0
Merci
Merci beaucoup pour toutes ces info très interessantes,  mon programme marche a merveille !
Encore merci et Bonne Prog !
Commenter la réponse de hacker_mt

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.