Le problème est que le format à virgule flottante représente les fractions en base 2.
La première fraction est peu½, la deuxième¼, et il s'en va comme 1 / 2n.
Et le problème c' est que chaque nombre rationnel (un nombre qui peut être exprimé comme le rapport de deux nombres entiers), en réalité, a une durée de représentation dans cette base de 2 format.
(Cela rend le format à virgule flottante difficiles à utiliser pour les valeurs monétaires. Bien que ces valeurs sont toujours des nombres rationnels (n/100) .00, .25, .50, et .75 fait exacte des représentations en quelques chiffres d'une base de deux fractions.
)
De toute façon, lorsque vous ajoutez de nouveau, le système obtient finalement une chance pour arrondir le résultat à un certain nombre que peut représenter exactement.
À un certain point, il se trouve que l'ajout de la .666... numéro de la .333... l'un, comme suit:
00111110 1 .o10101010 10101010 10101011
+ 00111111 0 .10101010 10101010 10101011o
------------------------------------------
00111111 1 (1).0000000 00000000 0000000x # the x isn't in the final result
Le bit plus à gauche est le signe, les huit sont l'exposant, et les bits restants sont de la fraction. Entre l'exposant et la fraction est un assummed "1" qui est toujours présent, et n'est donc pas réellement stockées, comme le normalisée la plus à gauche de la fraction bits. J'ai écrit des zéros qui ne sont pas effectivement présents en tant que personne de bits o
.
Est passé beaucoup de choses ici, à chaque étape, de la FPU a pris plutôt héroïque des mesures pour arrondir le résultat. Deux chiffres supplémentaires de précision (au-delà de ce que dans la suite) ont été conservés, et le FPU sait que dans de nombreux cas, le cas échéant, ou au moins 1, de la le reste des bits les plus à droite sont un. Si oui, alors qu'une partie de la fraction est supérieure à 0,5 (à l'échelle) et donc, il arrondit. L'intermédiaire en valeurs arrondies permettent à la FPU pour réaliser la droite peu tout le chemin à la partie entière et enfin la tour de la réponse correcte.
Cela n'arrive pas parce que quelqu'un a ajouté 0,5; le FPU juste fait du mieux qu'il pouvait, dans les limites du format. Virgule flottante n'est pas, en fait, inexactes. C'est parfaitement exact, mais pas tous les numéros, nous nous attendons à voir dans notre base 10, rationnels vision du monde sont représentable par la base 2 fraction du format.