nisaloncaje
Messages postés154Date d'inscriptionsamedi 7 janvier 2006StatutMembreDernière intervention28 septembre 2008
-
20 juil. 2006 à 22:19
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 2008
-
21 juil. 2006 à 18:19
Bonjour j'utilise dev c++ et j'utilise le code - on ne peut plus simple - suivant :
#include <cstdlib>
#include
using namespace std;
int main()
{
float i=5;
while(i>-1){
i-=0.05;
cout<<i<<endl;
}
system("PAUSE");
}
Rien de difficile du tout !!!!
Cependant, lors de l'affichage, j'obtiens des valeurs telles : 0.5499999 (au lieu de 0.55)
et lorsque i devrait etre égal à 0, j'ai : -9.30578e-007 !!!
Pourquoi ca fait ca ? (jai essayé de remplacé float par double, mais j'ai toujours le problème quand i devrait etre égal à 0!!!)
Au secours ! Je m'arrache les cheveux ! :cry:
PS : j'ai essayé de mettre à la place de float i=5 float i=5.0f, aucun changement.
De plus, si dans ma boucle je fais :
if(i==1.2){
cout<<"etape"<<endl;
}
le texte etape ne s'affiche jamais à l'écran alors que l'on peut constater sur la console qu'on passe bien par la valeur 1.2 !!!
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 20 juil. 2006 à 22:40
Car la valeur 0.55 n'existe pas en informatique. C'est juste une
approximation. Donc on utilise tjs une précision minimale (epsilon), et
donc l'égalité entre floatant devient sous forme mathématique
x = y <=> | x - y | < epsilon
Vous n’avez pas trouvé la réponse que vous recherchez ?
nisaloncaje
Messages postés154Date d'inscriptionsamedi 7 janvier 2006StatutMembreDernière intervention28 septembre 2008 20 juil. 2006 à 23:15
ok, mais dites moi, est ce possible de surdéfinir l'opérateur == pour qu'il fasse cette opération avec epsilon = 0.001 ? et si oui, comment ? (car il faut qu'il reste correctement défini si on fait une égalité d'int)
steve_clamage
Messages postés475Date d'inscriptiondimanche 3 octobre 2004StatutMembreDernière intervention11 août 20065 20 juil. 2006 à 23:25
C'est pas une bonne idée de chercher à résoudre ca de cette facon, car
meme si c'était possible ca ne respecterait pas la sémantique de
l'opérateur = =, | x - y | < epsilon est différent dex == y