Que cette marche n'est pas trivial du tout! C'est une propriété de la virgule flottante IEEE de la représentation que l'int∘étage = ⌊⋅⌋ si l'ampleur des chiffres en question est assez petit, mais les différentes représentations sont possibles, où int(étage(2.3)), pourrait être de 1.
Ce post explique pourquoi cela fonctionne dans la gamme.
Dans un double, vous pouvez représenter des entiers 32 bits sans aucun problème. Il ne peut pas être tout arrondi. Plus précisément, doubles peuvent représenter tous les entiers entre 253 et -253.
Petite explication: Un double peut stocker jusqu'à 53 chiffres binaires. Lorsque vous avez besoin de plus, le nombre est complétée par des zéros sur la droite.
Il s'ensuit que 53 est le plus grand nombre qui peut être stocké sans rembourrage. Naturellement, tous les (entier) le nombre, nécessitant moins de chiffres peuvent être stockées de façon précise.
Ajouter un à 111(omis)111 (53) les rendements de 100 000..., (53 zéros). Comme nous le savons, nous pouvons stocker 53 chiffres, qui rend le plus à droite zéro de remplissage.
C'est là que 253 .
Plus de détail: Nous avons besoin d'examiner la façon dont la norme IEEE-754 virgule flottante œuvres.
1 bit 11 / 8 52 / 23 # bits double/single precision
[ sign | exponent | mantissa ]
Le numéro est alors calculé comme suit (à l'exclusion des cas spéciaux qui ne sont pas pertinentes ici):
-1signe × 1.mantisse ×2exposant de polarisation
où biais = 2exposant - 1 - 1, c'est à dire 1023 et 127 pour double/simple précision, respectivement.
Sachant que le fait de multiplier par 2X simplement décale tous les bits de X à gauche, il est facile de voir que tout entier doit avoir tous les bits de la mantisse que l'extrémité droite de la virgule décimale à zéro.
Tout entier à l'exception du zéro a la forme suivante en binaire:
1x...x où les x-es représentent les bits vers la droite de la MSB (most significant bit).
Parce que nous avons exclu de zéro, il y aura toujours un MSB qu'est—ce qui est pourquoi il n'est pas stocké. Pour stocker un entier, nous devons le ramener dans le formulaire précité: -1signe × 1.mantisse ×2exposant de polarisation.
C'est en disant la même chose que de décaler les bits dans le point décimal jusqu'à ce qu'il n'est que le MSB vers la gauche de l'ESM. Tous les bits à droite de la virgule sont ensuite stockées dans la mantisse.
À partir de cela, nous pouvons voir que l'on peut stocker à plus de 52 chiffres binaires en dehors de l'ESM.
Il en résulte que le nombre le plus élevé où tous les bits sont explicitement stockée est
111(omitted)111. that's 53 ones (52 + implicit 1) in the case of doubles.
Pour cela, nous devons mettre de l'exposant, de telle sorte que le point décimal sera décalé de 52 places. Si nous étions à l'augmentation de l'exposant par l'un, nous ne pouvons pas connaître les chiffres de droite à gauche après le point décimal.
111(omitted)111x.
Par convention, c'est 0. Réglage de l'ensemble de la mantisse à zéro, nous avons reçu le numéro suivant:
100(omitted)00x. = 100(omitted)000.
C'est un 1 suivi de 53 zéros, 52 stockées et 1 ajoutées en raison de l'exposant.
Il représente 253, qui marque la frontière (à la fois positifs et négatifs) entre lesquelles on peut représenter tous les nombres entiers. Si nous voulions ajouter un à 253, on aurait à définir l'implicite zéro (dénoté par l' x
), mais c'est impossible.