Erreurs d'arrondi avec les nombres à virgule flottante en Python : percer le mystère
Dans le domaine des calculs numériques, traiter des flottants les nombres de points peuvent poser des problèmes en raison de leur précision limitée. Lors de l'exécution d'un script Python impliquant des variations de paramètres, un problème inattendu est survenu : l'absence de résultats pour des valeurs delta spécifiques (0,29 et 0,58). Un examen plus approfondi a révélé une vérité sous-jacente : l'incapacité inhérente de Python à représenter certains nombres exactement sous forme de flottants.
Pour démontrer ce phénomène, l'extrait de code suivant tente de convertir une plage d'entiers en leurs équivalents flottants :
for i_delta in range(0, 101, 1): delta = float(i_delta) / 100
Curieusement, pour des entiers spécifiques comme 29 et 58, les valeurs flottantes résultantes (0,289999999999999998 et 0,579999999999999996, respectivement) ne correspondent pas à leurs équivalents attendus (0,29 et 0,58). Cet écart est enraciné dans les limites fondamentales de l'arithmétique à virgule flottante.
Tous les systèmes à virgule flottante se rapprochent des nombres réels en utilisant une combinaison d'une base, d'un exposant et d'un nombre fixe de bits significatifs. Certaines valeurs, en particulier celles comportant des parties fractionnaires qui ne peuvent pas être exprimées exactement comme une puissance de deux, sont intrinsèquement difficiles à représenter avec précision. Par conséquent, ces valeurs sont arrondies ou approximées lors du stockage et du calcul.
Pour visualiser l'impact de cet arrondi, un script Python a été conçu pour démontrer les écarts entre les entiers réels et leurs approximations flottantes :
import sys n = int(sys.argv[1]) for i in range(0, n + 1): a = int(100 * (float(i) / 100)) if i != a: print i, a
Bien qu'il ne semble y avoir aucune tendance perceptible dans les nombres présentant ce comportement, le principe sous-jacent reste constant : tout nombre qui ne peut pas être représenté avec précision comme une combinaison de puissances exactes de deux faces ont la possibilité d'être approchées lorsqu'elles sont stockées sous forme de flotteur.
Pour approfondir les complexités de l'arithmétique à virgule flottante et ses conséquences en informatique, explorez des ressources telles que « Ce que tout informaticien devrait savoir sur la virgule flottante L'arithmétique" est fortement recommandée. Comprendre ces nuances est primordial pour naviguer dans les pièges de l'analyse numérique et garantir l'exactitude de vos calculs.
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!