Toutes les valeurs entières sont-elles représentées avec précision sous forme de doubles ?
Lorsqu'ils travaillent avec des entiers et des doubles, les développeurs peuvent se demander si toutes les valeurs entières peuvent être parfaitement représentés en double. Cette question a suscité des discussions et il est important d'explorer ses implications en profondeur.
La double représentation
Les doubles, selon la norme IEEE 754, sont représentés à l'aide d'une mantisse et un exposant. La mantisse contient la partie fractionnaire, tandis que l'exposant décale la mantisse vers la gauche ou la droite, représentant la valeur entière ou décimale.
Représentation des entiers sous forme de doubles
Dans Dans la représentation double, les entiers peuvent être représentés en utilisant un exposant qui supprime efficacement la partie décimale du nombre. Cela permet la représentation d'entiers en utilisant les bits fractionnaires de la mantisse.
Limitations pour les entiers de 64 bits
Bien que ce schéma fonctionne bien pour les entiers de 32 bits, il tombe abréviation de entiers de 64 bits. Le format double précision IEEE 754 ne peut représenter que des entiers jusqu'à 53 bits (52 bits de signification plus un 1 implicite en tête). Cela signifie que les entiers de 64 bits peuvent perdre en précision lorsqu'ils sont convertis en doubles.
Vérification empirique
Le code C suivant teste empiriquement la conversion d'entiers en doubles :
<code class="cpp">#include <iostream> #include <limits> int main() { double test; volatile int test_int; for(int i=0; i< std::numeric_limits<int>::max(); i++) { test = i; test_int = test; // compare int with int: if (test_int != i) std::cout << "found integer i=" << i << ", test=" << test << std::endl; } return 0; }</code>
L'exécution de ce code confirme que les entiers 64 bits n'ont pas de représentations doubles parfaites.
Conclusion
Par conséquent, la réponse à la question est :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!