Comme le dit ton second lien, il y a un probleme fondamental a faire de l'arithmetique decimale pour des chiffres [1;0]: la representation binaire ne correspond pas a un chiffre parfaitement precis (ie: nombre limites de chiffres significatifs).
Plus généralement (et plus exactement), il y a un probleme fondamental à faire de l'arithmetique décimale sur les ordinateurs utilisant une représentation binaire.
Comme expliqué sommairement dans le premier lien de mmMMOoooOMMmm, sur un ordinateur utilisant en interne des puissances de 2 pour représenter les nombres flottants, aucune puissance négative de 10 ne peut être exactement représentée (i.e. 0,1 ou 0,000001 par exemple). Les calculs flottants sur ordinateur ont une part d'imprécision qu'il faut savoir maîtriser (ce que je ne prétends pas). Le langage C suit la norme IEEE754 sur l'arithmétique flottante (cf. annexe F de la norme C); cette dernière est indépendante de tout langage ou matériel (c'est justement son intérêt) et, pour information, le C n'est pas le seul langage à l'utiliser (Java aussi, et à mon avis bien d'autres...).
Pour des informations beaucoup plus précises et complètes que ce que j'ai pu écrire au-dessus, mais néanmoins plus compréhensibles, sur ces calculs flottants et en particulier sur la norme IEEE754, lire l'article "What every computer scientist should know about floating-point arithmetic" de David Glodberg, publié dans l'ACM, et disponible en ligne à http://portal.acm.org/citation.cfm?doid=103162.103163 . Il s'agit d'un article très clair, et souvent référencé. C'est devenu ma référence dans le domaine ;) Plutôt que de te le résumer dans ce post, au risque de dire des dizaines d'âneries, je préfère te donner le lien (je viens même de voir que c'est le premier article référencé sur la page du groupe de travail de la norme IEEE754 http://grouper.ieee.org/groups/754/ !).
Je viens de tomber (suite aux liens précédents) sur http://grouper.ieee.org/groups/754/faq.html#binary-decimal qui répond à ta question ;), et renvoie à une FAQ qui traite entièrement du calcul décimal (mais sur une autre norme, semble-t-il)
Pour revenir au C, voir aussi la FAQ du newsgroup comp.lang.c, qui contient un chapitre dédié au calcul flottant: http://c-faq.com/fp/index.html .
Si ça n'étanche pas ta soif de savoir, tu peux lire l'annexe F de la norme C, et la documentation de ton comilateur (cf. l'annexe J.3.6 de la norme qui liste les points sur lesquels une implémentation C doit documenter ses choix).
[^] # Re: Quel compilateur sur quelle plateforme ?
Posté par alf . En réponse au message Probleme de précision. Évalué à 0.
Plus généralement (et plus exactement), il y a un probleme fondamental à faire de l'arithmetique décimale sur les ordinateurs utilisant une représentation binaire.
Comme expliqué sommairement dans le premier lien de mmMMOoooOMMmm, sur un ordinateur utilisant en interne des puissances de 2 pour représenter les nombres flottants, aucune puissance négative de 10 ne peut être exactement représentée (i.e. 0,1 ou 0,000001 par exemple). Les calculs flottants sur ordinateur ont une part d'imprécision qu'il faut savoir maîtriser (ce que je ne prétends pas). Le langage C suit la norme IEEE754 sur l'arithmétique flottante (cf. annexe F de la norme C); cette dernière est indépendante de tout langage ou matériel (c'est justement son intérêt) et, pour information, le C n'est pas le seul langage à l'utiliser (Java aussi, et à mon avis bien d'autres...).
Pour des informations beaucoup plus précises et complètes que ce que j'ai pu écrire au-dessus, mais néanmoins plus compréhensibles, sur ces calculs flottants et en particulier sur la norme IEEE754, lire l'article "What every computer scientist should know about floating-point arithmetic" de David Glodberg, publié dans l'ACM, et disponible en ligne à http://portal.acm.org/citation.cfm?doid=103162.103163 . Il s'agit d'un article très clair, et souvent référencé. C'est devenu ma référence dans le domaine ;) Plutôt que de te le résumer dans ce post, au risque de dire des dizaines d'âneries, je préfère te donner le lien (je viens même de voir que c'est le premier article référencé sur la page du groupe de travail de la norme IEEE754 http://grouper.ieee.org/groups/754/ !).
Je viens de tomber (suite aux liens précédents) sur http://grouper.ieee.org/groups/754/faq.html#binary-decimal qui répond à ta question ;), et renvoie à une FAQ qui traite entièrement du calcul décimal (mais sur une autre norme, semble-t-il)
Pour revenir au C, voir aussi la FAQ du newsgroup comp.lang.c, qui contient un chapitre dédié au calcul flottant: http://c-faq.com/fp/index.html .
Si ça n'étanche pas ta soif de savoir, tu peux lire l'annexe F de la norme C, et la documentation de ton comilateur (cf. l'annexe J.3.6 de la norme qui liste les points sur lesquels une implémentation C doit documenter ses choix).