Plusieurs questions ont été postées sur SO au sujet de la représentation en virgule flottante. Par exemple, le nombre décimal 0,1 n'a pas de représentation binaire exacte, il est donc dangereux d'utiliser l'opérateur == pour le comparer à un autre nombre à virgule flottante. Je comprends les principes de la représentation en virgule flottante.
Ce que je ne comprends pas, c'est pourquoi, d'un point de vue mathématique, les chiffres situés à droite de la virgule sont plus "spéciaux" que ceux situés à gauche ?
Par exemple, le nombre 61.0 a une représentation binaire exacte car la partie intégrale de tout nombre est toujours exacte. Mais le nombre 6,10 n'est pas exact. Tout ce que j'ai fait, c'est déplacer la décimale d'une place et soudain, je suis passé d'Exactopia à Inexactville. Mathématiquement, il ne devrait pas y avoir de différence intrinsèque entre les deux nombres - ce ne sont que des nombres.
En revanche, si je déplace la décimale d'une place dans l'autre sens pour obtenir le nombre 610, je suis toujours en Exactopia. Je peux continuer à aller dans cette direction (6100, 610000000, 610000000000000) et ils sont toujours exacts, exacts, exacts. Mais dès que la décimale franchit un certain seuil, les chiffres ne sont plus exacts.
Qu'est-ce qui se passe ?
Edit : pour clarifier, je veux rester à l'écart des discussions sur les représentations standard de l'industrie, comme l'IEEE, et m'en tenir à ce que je crois être la manière mathématiquement "pure". En base 10, les valeurs positionnelles sont :
... 1000 100 10 1 1/10 1/100 ...
En binaire, ils le seraient :
... 8 4 2 1 1/2 1/4 1/8 ...
Ces chiffres ne sont pas non plus soumis à des limites arbitraires. Les positions augmentent indéfiniment vers la gauche et vers la droite.