Maison > développement back-end > Tutoriel Python > Pourquoi certains nombres décimaux semblent-ils inexacts lorsqu'ils sont représentés sous forme de flottants en Python ?

Pourquoi certains nombres décimaux semblent-ils inexacts lorsqu'ils sont représentés sous forme de flottants en Python ?

Barbara Streisand
Libérer: 2024-12-06 02:20:14
original
711 Les gens l'ont consulté

Why Do Some Decimal Numbers Appear Inaccurate When Represented as Floats in Python?

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

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

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!

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