Représentation des nombres à virgule flottante en Python
En Python, les nombres à virgule flottante sont représentés selon la norme IEEE 754, qui est une norme largement adoptée pour représenter les nombres réels dans les ordinateurs. Cette norme définit le format et le comportement de l'arithmétique des nombres à virgule flottante, y compris la représentation de valeurs spéciales telles que l'infini positif et négatif, et le non-nombre (NaN).
Représentation des nombres à virgule flottante
Les nombres à virgule flottante en Python sont stockés dans un format de 64 bits, également connu sous le nom de nombre à virgule flottante « double précision ». Ce format se compose de trois composants :
- Bit de signe : Détermine si le nombre est positif ou négatif.
- Exposant : Représente la puissance de 2 à laquelle le mantisse est élevé.
- Mantisse : La partie fractionnaire du nombre.
La représentation d'un nombre à virgule flottante en Python peut être visualisée comme suit :
graph TD
A[Sign Bit] --> B[Exponent]
B --> C[Significand]
La norme IEEE 754 définit des motifs de bits spécifiques pour représenter des valeurs spéciales, telles que zéro positif et négatif, l'infini positif et négatif, et NaN.
Précision et arrondi
L'arithmétique des nombres à virgule flottante dans les ordinateurs n'est pas toujours exacte en raison du nombre fini de bits utilisés pour représenter les nombres. Cela peut entraîner des erreurs d'arrondi et un comportement inattendu lors de la comparaison de valeurs à virgule flottante. Par exemple, le code suivant illustre le problème :
import sys
x = 0.1
y = 0.2
print(x + y) ## Output: 0.30000000000000004
La raison de ce comportement est que la représentation binaire de 0,1 et 0,2 ne peut pas être représentée exactement dans le nombre fini de bits utilisés pour stocker les nombres à virgule flottante.
Pour résoudre ce problème, diverses techniques de comparaison précise des nombres à virgule flottante sont discutées dans la section suivante.