Le plus grand nombre entier qui peut être stocké dans un double sans perdre la précision est le même que la plus grande valeur possible d'un double. C'est-à-dire DBL_MAX
soit environ 1,8 × 10 308 (si votre double est un double IEEE 754 de 64 bits). C'est un nombre entier. Il est représenté exactement. Que voulez-vous de plus ?
Allez-y, demandez-moi quel est le plus grand nombre entier, tel qu'il et tous les entiers plus petits peuvent être stockés dans des doubles IEEE 64 bits sans perte de précision. Un double IEEE 64-bit a 52 bits de mantisse, donc je pense que c'est 2 53 :
- 2 53 + 1 ne peut pas être stocké, car le 1 du début et le 1 de la fin ont trop de zéros entre eux.
- Tout ce qui est inférieur à 2 53 peut être stockée, avec 52 bits explicitement stockés dans la mantisse, puis l'exposant vous en donne un autre.
- 2 53 peut évidemment être stocké, puisqu'il s'agit d'une petite puissance de 2.
Ou une autre façon de voir les choses : une fois que le biais a été retiré de l'exposant, et en ignorant le bit de signe qui n'est pas pertinent pour la question, la valeur stockée par un double est une puissance de 2, plus un entier de 52 bits multiplié par 2. exposant 52 . Ainsi, avec l'exposant 52, vous pouvez stocker toutes les valeurs de 2 52 jusqu'à 2 53 1. Puis avec l'exposant 53, le prochain nombre que vous pouvez stocker après 2 53 est de 2 53 + 1 × 2 53 52 . La perte de précision se produit donc d'abord avec 2 53 + 1.