Les nombres à virgule flottante sont normalement représentés comme des fractions binaires multipliées par une puissance de deux, pour des raisons d'efficacité. C'est à peu près aussi précis que la représentation en base 10, sauf qu'il y a des fractions décimales qui ne peuvent pas être exactement représentées comme des fractions binaires. Ils sont, au contraire, représentés comme des approximations.
De plus, un float
a normalement une longueur de 32 bits, ce qui signifie qu'il n'a pas beaucoup de chiffres significatifs. Vous pouvez voir dans vos exemples qu'ils sont précis à environ 8 chiffres significatifs. Cependant, vous imprimez les nombres légèrement au-delà de leur signification, et vous voyez donc la différence. Regardez votre documentation de chaîne de format printf
pour voir comment imprimer moins de chiffres.
Vous devrez peut-être représenter les nombres décimaux exactement; Cela arrive souvent dans les applications financières. Dans ce cas, vous devez utiliser une bibliothèque spéciale pour représenter les nombres, ou simplement calculer tout comme des entiers (par exemple, représenter les montants en cents plutôt qu'en dollars et fractions de dollar).
La référence standard est What Every Computer Scientist Should Know About Floating-Point Arithmetic, mais il semble que ce serait très avancé pour vous. Alternativement, vous pouvez utiliser les formats à virgule flottante de Google (en particulier les formats standard IEEE) ou les consulter sur Wikipedia, si vous voulez les détails.
jetez un oeil à: http://docs.sun.com/source/806-3568/ncg_goldberg.html – Max