égalité de float c++
Fermé
Greggygreg
Messages postés
7
Date d'inscription
mardi 18 mai 2010
Statut
Membre
Dernière intervention
26 mai 2010
-
25 mai 2010 à 20:49
Greggygreg Messages postés 7 Date d'inscription mardi 18 mai 2010 Statut Membre Dernière intervention 26 mai 2010 - 26 mai 2010 à 10:41
Greggygreg Messages postés 7 Date d'inscription mardi 18 mai 2010 Statut Membre Dernière intervention 26 mai 2010 - 26 mai 2010 à 10:41
A voir également:
- égalité de float c++
- Float c - Astuces et Solutions
- Float en java - Astuces et Solutions
- Langage c division float - Forum C
- C++ arrondir float - Forum C++
- Float ** - Forum C++
3 réponses
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
25 mai 2010 à 21:48
25 mai 2010 à 21:48
En fait tu n'as pas zéro.
La différence entre tes deux float est un nombre très très proche de zéro, du coup ça ne se voit pas à l'affichage.
On parle parfois de représentation approchée pour désigner les formats float, double, etc. Ce terme est pertinent car il est impossible d'avoir une précision absolue en informatique.
Le problème du zéro est un des inconvénients du format float utilisé en C++ (il s'agit de la norme IEEE 754).
Ce qui est amusant c'est que le printf est moins « sensible » que le cout. Tu as essayé avec %d ?
Pour répondre à ta question, je te conseille de convertir tes nombres en double avant de les soustraire, ça te donnera un résultat plus précis et tu verras peut-être quelque chose.
:)
La différence entre tes deux float est un nombre très très proche de zéro, du coup ça ne se voit pas à l'affichage.
On parle parfois de représentation approchée pour désigner les formats float, double, etc. Ce terme est pertinent car il est impossible d'avoir une précision absolue en informatique.
Le problème du zéro est un des inconvénients du format float utilisé en C++ (il s'agit de la norme IEEE 754).
Ce qui est amusant c'est que le printf est moins « sensible » que le cout. Tu as essayé avec %d ?
Pour répondre à ta question, je te conseille de convertir tes nombres en double avant de les soustraire, ça te donnera un résultat plus précis et tu verras peut-être quelque chose.
:)
Greggygreg
Messages postés
7
Date d'inscription
mardi 18 mai 2010
Statut
Membre
Dernière intervention
26 mai 2010
26 mai 2010 à 10:35
26 mai 2010 à 10:35
Le problème ne vient pas de la précision je pense (bien qu'effectivement, il est surprenant que cout soit plus précis que %f...)
Parce que si tu veux, j'obtiens ça :
Donc, on a bien *D1[0] différent de *D0[0] (1ère et 2ème ligne) mais sur la 3ème ligne, il me met que *D0[0]=*D1[0]. Pourquoi il ne me garde pas la valeur de *D0 ?
Pour obtenir D0, je récupère un tableau de 3 case d'une matrice codé ailleurs, j'effectue des modifications sur la matrice, et je récupère le même tableau après récupération dans D1.
Donc en fait, pourquoi il ne me change ma valeur de D0 ?
Parce que si tu veux, j'obtiens ça :
float kiki=(*D1[0])*100000000000;
// je tente d'augmenter pour voir si c'est un problème de précision
float koko=(*D0[0])*100000000000;
cout<<*D0[0]<<"\t"<<*D0[1]<<"\t"<<*D0[2]<<endl;
cout<<*D1[0]<<"\t"<<*D1[1]<<"\t"<<*D1[2]<<endl;
float mich=kiki-koko;
printf("kiki = %f \t koko = %f \t %f \n",kiki,koko,mich);
7.16186e-13 0 0
1.01094e-12 0 0
kiki = 0.101094 koko = 0.101094 0.000000
Donc, on a bien *D1[0] différent de *D0[0] (1ère et 2ème ligne) mais sur la 3ème ligne, il me met que *D0[0]=*D1[0]. Pourquoi il ne me garde pas la valeur de *D0 ?
Pour obtenir D0, je récupère un tableau de 3 case d'une matrice codé ailleurs, j'effectue des modifications sur la matrice, et je récupère le même tableau après récupération dans D1.
Donc en fait, pourquoi il ne me change ma valeur de D0 ?
Greggygreg
Messages postés
7
Date d'inscription
mardi 18 mai 2010
Statut
Membre
Dernière intervention
26 mai 2010
26 mai 2010 à 10:41
26 mai 2010 à 10:41
Non en fait c'est bon, un problème de déclaration dynamique, il n'y avait pas de copie du coup ça me changeait la valeur de D0 trop tôt, j'ai déclaré koko plus haut, juste après avoir D0 et avant l'opération sur la matrice et maintenant ça marche.
Merci quand même Groah
Merci quand même Groah