Problème très simple mais irésolu - C - Programmation
Marsh Posté le 07-02-2007 à 18:25:12
parce que c'est un nombre flottant.
Marsh Posté le 07-02-2007 à 18:29:14
merci, c bizzare avant je mettai toujours du flottant et ça marchai... en tout cas c bon now thanks
Marsh Posté le 07-02-2007 à 19:26:57
bon en fait ça marche que pour les chiffres rond : 0.5 1 , 1.5 mais pas pour les chiffres du genre 1.2 0.9... pourquoi ???
que dois - je mettre à la place de float pour que le if le detecte
Marsh Posté le 07-02-2007 à 20:20:15
un indice
augmente la précision d'affichage dans ton printf (en mettant 10.10f par exemple), et tu verras que quand tu incrementes de 0.01, ça ne vaut pas "exactement" 0.01. C'est du à l'imprécision des nombres flottants. (voir http://fr.wikipedia.org/wiki/IEEE_754 )
ex de résultat :
Code :
|
du coup ta comparaison entre ces nombres et 0.5 ne sera jamais vraie
Marsh Posté le 07-02-2007 à 20:39:15
merci beaucoup, je ne pensais pas que l'imprecision était de cet ordre, je vais proceder avec des nombres entiers et ensuite diviser.
Marsh Posté le 07-02-2007 à 23:55:29
sinon tu fait une macro de comparasion en introduisant une variable Epsilon de l'ordre de 0,001 et tu teste si ta variable appratient à l'intervalle +/- Epsilon...
Je fait ca partout moi...
Marsh Posté le 08-02-2007 à 00:06:50
axialee a écrit : |
Normal, == et != ne fonctionnent quasiment jamais avec les flottants.
Ceci fonctionne :
Code :
|
0.5000 |
Pose des questions si tu ne comprends pas
Marsh Posté le 07-02-2007 à 18:23:21
Bonjour,
peut être pourrez vous éclairer ma lanterne :
je veux tester la valeur numérique d'une variable,
je n'ai jamais eu ce genre de problème jusqu'à présent, je n'y comprend plus rien :
voici un programme simplicime résumant mon probleme :
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define NMAX 100
int main(void)
{
float variable;
variable=0;
do
{
variable=variable+0.01;
if(variable==0.5)
{
printf("ça marche enfin" );
system("pause" );
}
printf("%10.4f \n",variable);
}
while (variable <=1.99);
system("pause" );
}
Dans le test if(variable==0.5), il ne se passe jamais rien quelque soit la valeur que j'y mette pourquoi ?