Explorer la représentation des nombres à virgule flottante
Dans cette étape, vous allez explorer comment les nombres à virgule flottante (floating-point numbers) sont représentés en Python et les implications potentielles de cette représentation sur les comparaisons numériques. Les nombres à virgule flottante sont utilisés pour représenter les nombres réels (nombres avec des points décimaux) dans les ordinateurs. Cependant, en raison de la manière dont ils sont stockés en mémoire, ils sont souvent des approximations des nombres réels réels. Cela peut entraîner des résultats inattendus lors de comparaisons.
Commençons par créer un fichier Python nommé float_representation.py
dans votre répertoire ~/project
en utilisant l'éditeur VS Code.
## Create a floating-point number
x = 0.1 + 0.2
## Print the value of x
print(x)
Enregistrez le fichier, puis exécutez-le en utilisant la commande suivante dans le terminal :
python float_representation.py
Vous pourriez vous attendre à ce que la sortie soit 0.3
, mais vous verrez probablement quelque chose comme ceci :
0.30000000000000004
Cela est dû au fait que 0.1
et 0.2
ne peuvent pas être représentés exactement comme des nombres à virgule flottante. Le résultat de l'addition est un nombre très proche de 0.3
, mais pas exactement égal à celui-ci.
Maintenant, voyons comment cette imprécision peut affecter les comparaisons. Ajoutez le code suivant à votre fichier float_representation.py
:
## Create a floating-point number
x = 0.1 + 0.2
## Check if x is equal to 0.3
if x == 0.3:
print("x is equal to 0.3")
else:
print("x is not equal to 0.3")
Enregistrez le fichier et exécutez-le à nouveau :
python float_representation.py
Vous verrez probablement la sortie suivante :
x is not equal to 0.3
Cela est dû au fait que x
n'est pas exactement égal à 0.3
en raison du problème de représentation des nombres à virgule flottante.
Pour comparer précisément les nombres à virgule flottante, vous devriez utiliser une valeur de tolérance. Au lieu de vérifier l'égalité exacte, vérifiez si la différence absolue entre les deux nombres est inférieure à une petite valeur de tolérance.
Modifiez votre fichier float_representation.py
pour inclure une tolérance :
## Create a floating-point number
x = 0.1 + 0.2
## Define a tolerance value
tolerance = 1e-9 ## A small value like 0.000000001
## Check if x is approximately equal to 0.3
if abs(x - 0.3) < tolerance:
print("x is approximately equal to 0.3")
else:
print("x is not approximately equal to 0.3")
Enregistrez le fichier et exécutez-le une dernière fois :
python float_representation.py
Maintenant, vous devriez voir la sortie suivante :
x is approximately equal to 0.3
En utilisant une tolérance, vous pouvez comparer précisément les nombres à virgule flottante malgré l'imprécision inhérente de leur représentation. C'est un concept crucial à comprendre lorsque vous travaillez avec des nombres à virgule flottante en Python et dans d'autres langages de programmation.