#1 Le 08/09/2013, à 20:21
- neokal
[RESOLU] Erreur dans la fonction atof en language C
Bonsoir à tous,
Cela fait un moment que je remarque une erreur simple dans mes calculs en C avec la fonction atof()
La voici:
char * test="53.7";
float test1;
test1=atof(test);
printf("test %s\n",test);
printf("test1 %f\n",test1);
printf("test1 %.15f\n",test1); //15 chiffres aprés la virgule pour mettre le bug en évidence
Me renvoi à l'écran
test 53.7
test1 53.700001
test1 53.700000762939453
J'ai tester avec une variable double au lieu de float, rajouter #include <math.h> dans l'en tete de mon fichier et meme tester avec la fonction strtof() rien n'y fait, toujours les memes chiffres qui traine loin aprés la virgule.
Je n'y comprend rien si quelqu'un peu m'aider ,car meme si le calcul général s'en approche il est quand meme faux :-)
Merci
Dernière modification par neokal (Le 12/09/2019, à 14:32)
Celui qui se transforme en bête se délivre de la douleur d'être un homme...
Hors ligne
#2 Le 08/09/2013, à 21:07
- Braun
Re : [RESOLU] Erreur dans la fonction atof en language C
Bonsoir,
Effectivement, je confirme l'incongruité du résultat.
On ne se méfie jamais assez des floating point.
La question bête que je me pose est: cela vient-il du compilateur C ou du processeur?
Hors ligne
#3 Le 08/09/2013, à 21:21
- jacobus77
Re : [RESOLU] Erreur dans la fonction atof en language C
#include <stdio.h>
#include <stdlib.h>
int main()
{
char * test="53.7";
double test1;
test1=atof(test);
printf("test %s\n",test);
printf("test1 %f\n",test1);
printf("test1 %.15f\n",test1); //15 chiffres aprés la virgule pour mettre le bug en évidence
return 0;
}
test 53.7
test1 53.700000
test1 53.700000000000003
atof renvoit un double pas un float, ton pb serait plutôt du côté de l'approximation lors de la conversion.
Hors ligne
#4 Le 08/09/2013, à 21:32
- tiramiseb
Re : [RESOLU] Erreur dans la fonction atof en language C
Bienvenue dans le monde des approximations des float !
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#5 Le 08/09/2013, à 22:17
- neokal
Re : [RESOLU] Erreur dans la fonction atof en language C
J'ai tester avec une variable double au lieu de float, ...
Honnétement rien n'y fait, sinon je n'aurais pas poster
Dernière modification par neokal (Le 08/09/2013, à 22:17)
Celui qui se transforme en bête se délivre de la douleur d'être un homme...
Hors ligne
#6 Le 09/09/2013, à 01:13
- grim7reaper
Re : [RESOLU] Erreur dans la fonction atof en language C
Aucune erreur, c’est normal.
Par défaut (i.e si tu n’utilise pas une bibliothèque spécialisée genre GMP) les réels sont encodées en nombre à virgule flottante suivant la norme IEEE 754.
Je te conseille de te renseigner la dessus, et tu verras que le comportement que tu observes est normal et logique.
Si l’anglais ne te dérange pas, tu peux lire ça et cette série d’articles (un seul a été traduit jusqu’à maintenant). Si l’anglais te dérange, bah désolé mais je n’ai pas de bonnes ressources en français sous la main
Il faut savoir que le boulot fait par strtod (mais ça s’applique probablement aussi à atof (au passage, atof est déprécié au profit de strtod qui a une meilleure gestion des erreurs)) est loin d’être trivial. Convertir une chaîne de caractères en nombre flottant, c’est compliqué donc oui parfois il y a des bugs (cet article résume très bien le truc).
Mais là clairement, le comportement me semble normal.
Hors ligne