Maison > développement back-end > C++ > Pourquoi `pow(10, 5)` renvoie-t-il parfois 9999 au lieu de 10 000 en C ?

Pourquoi `pow(10, 5)` renvoie-t-il parfois 9999 au lieu de 10 000 en C ?

Patricia Arquette
Libérer: 2024-12-27 21:07:16
original
194 Les gens l'ont consulté

Why Does `pow(10, 5)` Sometimes Return 9999 Instead of 10000 in C  ?

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;
}
Copier après la connexion

La sortie de ce code s'affichera de manière incorrecte :

9999
1000
99
10
1
Copier après la connexion

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
}
Copier après la connexion

Avec cette modification, la sortie affichera correctement :

10000
1000
100
10
1
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal