C'est donner la "mauvaise" réponse simplement parce que toutes les valeurs réelles ne sont pas représentables par des flotteurs (ou doubles, d'ailleurs). Ce que vous obtiendrez est une approximation basée sur le codage sous-jacent.
Afin de représenter chaque valeur réelle, même entre 1,0x10 -100 et 1.1x10 -100 (une gamme vraiment minuscule), vous avez encore besoin d'un nombre infini de bits.
Les valeurs IEEE754 à simple précision ont seulement 32 bits disponibles (dont certains sont affectés à d'autres choses telles que les représentations d'exposant et NaN/Inf) et ne peuvent donc pas vous donner une précision infinie. Ils ont en fait 23 bits disponibles donnant une précision d'environ 2 (il y a un bit implicite supplémentaire) ou un peu plus de 7 chiffres décimaux (log (2) est d'environ 7,2).
Je joins le mot "faux" entre guillemets parce que ce n'est pas réellement faux. Ce qui ne va pas, c'est votre compréhension de la façon dont les ordinateurs représentent les chiffres (ne soyez pas offensé cependant, vous n'êtes pas seul dans cette méprise).
Rendez-vous sur http://www.h-schmidt.net/FloatApplet/IEEE754.html et tapez votre numéro dans la case "Représentation décimale" pour voir cela en action. Si vous voulez un nombre plus précis, utilisez des doubles plutôt que des flottants - ils ont le double du nombre de bits disponibles pour représenter les valeurs (en supposant que votre implémentation C utilise les types de données simple et double précision IEEE754 pour float et double respectivement). Si vous voulez une précision arbitraire, vous devez utiliser une bibliothèque "bignum" comme GMP bien que ce soit un peu plus lent que les types natifs, alors assurez-vous de bien comprendre les compromis.
Je savais que ce arrivé en cas de C#. Mais jamais connu dans le cas de C. – anonymous
'float' de C est également fixe type de précision donc il n'y a pas de différence à C#. –