Maison >développement back-end >C++ >Pourquoi mon calcul de probabilité produit-il des résultats inattendus ?
Exploration de l'erreur en virgule flottante : un exemple simple
Les conversations autour des variables à virgule flottante mentionnent souvent le potentiel d'une « erreur ». Ce concept peut devenir particulièrement pertinent lors de la pratique de la résolution de problèmes, par exemple dans le contexte d'un puzzle donné.
Considérez ce qui suit : pour trouver la probabilité d'obtenir exactement deux succès dans dix essais indépendants, vous avez utilisé la formule :
p_2x_success = pow(1-p, (double)8) * pow(p, (double)2) * (double)choose(8, 2);
Le problème de l'erreur en virgule flottante
Dans ce cas, l'erreur en virgule flottante devient un problème potentiel. Les variables à virgule flottante sont utilisées pour représenter des nombres réels sur les ordinateurs, mais leur représentation n'est pas exacte en raison des limitations de l'espace de stockage et des capacités de traitement. Par conséquent, lors de l'exécution d'opérations en virgule flottante, des erreurs peuvent s'accumuler.
Pour illustrer cela, visualisons la fonction f(k) à l'aide d'un graphique en échelle logarithmique :
[Image du graphique XY avec X et Y en échelle logarithmique]
Si l'ordinateur pouvait parfaitement représenter des flottants de 32 bits sans erreur d'arrondi, le résultat pour chaque k serait zéro. Cependant, à mesure que k augmente, nous assistons à une erreur croissante attribuée à l'accumulation d'erreurs en virgule flottante.
Réplications en C
Vous pouvez reproduire ce comportement en C en implémentant ce qui suit code :
for (int k = 1; k < 1000; k++) { cout << "k = " << k << ", error = " << (pow(1-k, (double)8) * pow(k, (double)2) * (double)choose(8, 2)) << endl; }
Conclusion
Cet exemple simple démontre le potentiel du flottement erreur de point lors de l’exécution d’opérations en virgule flottante. Il est important d'être conscient de ce phénomène et d'en tenir compte lors de la mise en œuvre de calculs numériques.
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!