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

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

DDD
Libérer: 2025-01-01 08:33:10
original
931 Les gens l'ont consulté

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

Pourquoi pow(10,5) peut être égal à 9 999 en C

En C, utiliser pow(10, 5) pour calculer 10 élevé à la puissance 5 peut entraînent parfois une valeur inattendue de 9 999. Ce comportement n'est pas cohérent et peut prêter à confusion, comme le démontre l'extrait de code suivant :

const int sections = 10;

for (int t = 0; t < 5; t++) {
    int i = pow(sections, 5 - t - 1);
    cout << i << endl;
}
Copier après la connexion

Le résultat attendu de ce code est [10000, 1000, 100, 10, 1], mais en réalité produit [9999, 1000, 99, 10, 1].

Explication

La cause de ce problème réside dans la représentation en virgule flottante de pow(10.0, 5) en C . Lorsque le résultat de ce calcul est stocké dans une variable à virgule flottante double précision, il peut contenir des parties fractionnaires. Lorsqu'elle est ensuite affectée à une variable entière, la partie fractionnaire est tronquée, ce qui donne une valeur légèrement inférieure à la réponse réelle. Dans ce cas, pow(10.0, 5) peut être représenté en interne par 9999.9999999, qui est tronqué à 9999 lorsqu'il est affecté à un entier.

Solution

Pour éviter ce problème, on peut utiliser le alternatives suivantes :

  • Spécifiez le résultat de pow sous forme de valeur à virgule flottante double précision : double i = pow(sections, 5 - t - 1);.
  • Arrondissez le résultat de pow à l'entier le plus proche à l'aide de la fonction round : int i = round(pow( sections, 5 - t - 1));.
  • Utilisez une représentation à virgule flottante plus précise, telle que long double ou quad double.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal