2.4 Erreurs de virgule flottante
Objectifs d'apprentissage
À la fin de cette section, vous devriez être en mesure de
- Expliquer les inexactitudes numériques liées à la représentation en virgule flottante.
- Utiliser la fonction
round()pour atténuer les erreurs de virgule flottante dans les sorties.
Erreurs de virgule flottante
Les ordinateurs stockent les informations en utilisant des 0 et des 1. Toutes les informations doivent être converties en une suite de 0 et de 1. Ex. : 5 est converti en 101. Comme seules deux valeurs, 0 ou 1, sont autorisées, ce format est appelé binaire.
Les valeurs en virgule flottante sont stockées en binaire par Python. La conversion d'un nombre à virgule flottante vers le format binaire sous-jacent entraîne des types spécifiques d'erreurs de virgule flottante.
Une erreur d'arrondi (round-off error) se produit lorsque des valeurs en virgule flottante sont stockées de manière erronée sous forme d'approximation. La différence entre une approximation d'une valeur utilisée dans un calcul et la valeur exacte (vraie) est appelée une erreur d'arrondi.
Ex. : Le stockage du flottant (0.1)10 donne des valeurs binaires qui produisent en réalité (0.1000000000000000055511151231257827021181583404541015625)10 lorsqu'elles sont reconverties, ce qui n'est pas exactement égal à (0.1)10.
# Print floats with 30 decimal places
print(f'{0.1:.30f}') # prints 0.1
print(f'{0.2:.30f}') # prints 0.2
print(f'{0.4:.30f}') # prints 0.4
|
0.100000000000000005551115123126
0.200000000000000011102230246252
0.400000000000000022204460492503
|
Une erreur de dépassement (overflow error) se produit lorsqu'une valeur est trop grande pour être stockée. Les valeurs en virgule flottante maximale et minimale pouvant être représentées sont et , respectivement. Tenter de stocker une valeur en virgule flottante en dehors de l'intervalle entraîne une erreur de dépassement.
Ci-dessous, et peuvent être représentés, mais est trop grand et provoque une erreur de dépassement.
print('3.0 to the power of 256 =', 3.0**256)
print('3.0 to the power of 512 = ', 3.0**512)
print('3.0 to the power of 1024 = ', 3.0**1024)
|
3.0 to the power of 256 = 1.3900845237714473e+122
3.0 to the power of 512 = 1.9323349832288915e+244
3.0 to the power of 1024 =
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
print('3.0 to the power of 1024 = ', 3.0**1024)
OverflowError: (34, 'Numerical result out of range')
|
Concepts en pratique
Erreurs de virgule flottante
Pour chaque situation, quelle erreur se produit ?
Fonction round() en virgule flottante
La fonction round() de Python est utilisée pour arrondir un nombre en virgule flottante à un nombre donné de décimales. La fonction prend deux arguments. Le premier argument est le nombre à arrondir. Le second argument détermine le nombre de décimales auquel le nombre est arrondi. Si le second argument n'est pas fourni, le nombre sera arrondi à l'entier le plus proche. La fonction round() peut être utilisée pour atténuer les erreurs de virgule flottante.
Ex. :
round(2.451, 2) = 2.45round(2.451) = 2
Concepts en pratique
Exemples de la fonction round()
À vous d'essayer
Pourboires inexacts
Le code suivant calcule le montant du pourboire à partir du montant de l'addition et du taux de pourboire. Faites des essais avec les montants d'addition et les taux de pourboire suivants pour voir si des inexactitudes peuvent survenir lors du calcul du montant du pourboire.
- montant de l'addition : 22.70 et 33.33
- taux de pourboire : 0.15, 0.18 et 0.20
À vous d'essayer
Aire d'un triangle
Effectuez les étapes suivantes pour calculer l'aire d'un triangle, puis affichez le résultat de chaque étape. L'aire d'un triangle est , où b est la base et h est la hauteur.
- Calculez l'aire d'un triangle avec base = 7 et hauteur = 3.5.
- Arrondissez l'aire du triangle à une décimale.
- Arrondissez l'aire du triangle à la valeur entière la plus proche.