Pourquoi pow(10,5) affiche 9 999 au lieu de 10 000 en C
En C, lors de l'utilisation de la fonction pow() avec un entier entrées et exposants à virgule flottante, des résultats inattendus peuvent se produire en raison de la représentation des valeurs à virgule flottante. Plus précisément, pow(10.0, 5) peut donner une valeur de 9999,9999999 ou similaire. Lorsque cette valeur à virgule flottante est affectée à une variable entière, elle est tronquée.
Par exemple, considérons l'extrait de code suivant :
const int sections = 10; for(int t = 0; t < 5; t++){ int i = pow(sections, 5- t -1); // <-- pow() with integer base, floating-point exponent cout << i << endl; }
La sortie de ce code s'affichera de manière incorrecte :
9999 1000 99 10 1
Cependant, si le code est modifié pour utiliser la fonction pow() directement dans l'instruction cout, les résultats attendus sont obtenu :
for(int t = 0; t < 5; t++){ cout << pow(sections,5-t-1) << endl; // <-- pow() used directly in cout }
Avec cette modification, la sortie affichera correctement :
10000 1000 100 10 1
Cet écart se produit car dans le premier exemple, le résultat en virgule flottante de pow(sections, 5 - t -1) est tronqué lorsqu'il est affecté à une variable entière. Dans le deuxième exemple, cependant, le résultat en virgule flottante est arrondi lorsqu'il est transmis directement à cout, ce qui entraîne un affichage correct.
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!