begin process at 2012 05 29 17:31:42
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Divers

 > 

Problème incroyable !!!


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème incroyable !!!

jeudi 20 juillet 2006 à 22:19:13 | Problème incroyable !!!

nisaloncaje

Bonjour j'utilise dev c++ et j'utilise le code - on ne peut plus simple - suivant :

#include <cstdlib>
#include <iostream>

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 !!!

jeudi 20 juillet 2006 à 22:27:10 | Re : Problème incroyable !!!

SAKingdom

Membre Club
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
    float i=5.0f;

    while(i>=0.0f)
    {
        cout<<i<<endl;
        i-=0.05f;
    }
  
    system("PAUSE");
}


C++ (@++)
___________________________________________
Venez débattre de sujets touchant à la programmation ici
jeudi 20 juillet 2006 à 22:39:21 | Re : Problème incroyable !!!

nisaloncaje

ca me change rien : compiler, et voyez à partir de 1 ce qui se passe !
jeudi 20 juillet 2006 à 22:40:20 | Re : Problème incroyable !!!

luhtor

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
jeudi 20 juillet 2006 à 23:10:47 | Re : Problème incroyable !!!

steve_clamage

Exact, et la bibliothèque standard le fournie même :
std::numeric_limits<float>::epsilon()

jeudi 20 juillet 2006 à 23:15:32 | Re : Problème incroyable !!!

nisaloncaje

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)
jeudi 20 juillet 2006 à 23:25:01 | Re : Problème incroyable !!!

steve_clamage

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 | < epsilonest différent dex == y
vendredi 21 juillet 2006 à 10:11:46 | Re : Problème incroyable !!!

HSylvio

Tu peux pas faire quelque chose qui permet de feinter l'approximation; genre

float i=...(5);
double palier = ...(0.05), etape = ...(1.2);
int limite = ...(-1);
int mult = (int)(1/palier);
i *=mult;

while(i>mult*i){
   i--;
   cout<<(double)(i/mult)<<endl;  

   if( (int)(etape * mult) == i)

    {    cout<<"Etape"<<endl;
    }
}
   
    system("PAUSE");
}

??

vendredi 21 juillet 2006 à 16:07:39 | Re : Problème incroyable !!!

luhtor

Mais dans ton cas, tu peux aussi travailler sur des entiers:

int i = 100;
while (i > -1)
{
i--;
std::cout << float(i) * 0.05 << std::endl;
}

Evidemment, si les perfs n'ont aucun intérets, car je suis pas sur que la convertion soit si rapide :)

vendredi 21 juillet 2006 à 18:03:47 | Re : Problème incroyable !!!

nisaloncaje

ok merci de toute vos réponses :)

par contre serait-il possible de définir un opérateur tel ~= (inexistant pour le moment à ma ocnnaissance) afin de permettre cette approximation ?

1 2

Cette discussion est classée dans : problème, include, utilise, float, incroyable


Répondre à ce message

Sujets en rapport avec ce message

Problème avec SetLayeredWindowAttributes [ par Oeil_de_taupe ] Bonjour tlm, Lors d'un projet je veux mettre une fenêtre transparente. J'utilise l'API SetLayeredWindowAttributes. Le petit problème c'est que je n calculs tableau [ par 3463 ] Salut à tous !! J'ai besoin de votre aide [^^happy13] Voici mon programme : # include # include # include # include # include # include # incl Tableau C [ par 3463 ] Salut à tous j'ai vraiment besoin de votre aide !! [code=cpp] # include # include # include # include # include # include # include using nam Problème IDE [ par florianpoi1 ] Bonjour, voila j'utilise DEV C++ et il y avait un projet quelqun a fait : http://www.cppfrance.com/codes/MORPION-CONSOLE_49112.aspxet donc je téléchar Conversion chaîne en nombre [ par baham ] Bonjour à tous!  Je viens vous voir car je rencontre un problème ; je souhaite convertir une chaîne de caractère en un nombre à virgule (float, double Problème de compréhension tableau. [ par fhoest ] Bonjour, je débute en c++ et j'ai un problème sur le dimensionnement d'un tableau, voilà ce que je ne comprend pas je défini un tableau de 5 (case) en problème de fonction de tirage aléatoire en poker [ par moonlight2509 ] Salut, étant en débutant en langage c mon problème paraît peut-être très bête!! Voilà j'ai un problème d'argument ou de type de fonction dans la fonct problème de if et else [ par ffnajia ] bonjour je comprend pas pourquoi le programme ci-dessous ne prend pas en compte l'éxistence de if et else!!!???#include#include using namespace std; Problème avec C++ 2005 [ par drnicholas001 ] Salut, j'ai une problème avec C++ 2005 express edition. J'ai le code suivant :#include #include #include using namespace std; int main(int argc, Problème avec glew [ par wperrad ] salut tout le mondeJ'ai essayé d'utiliser glew dans un projet : quand je l'utilise dans un source qui doit générer un exe ça se passe sans pb, mais dè


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,680 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales