Erreurs de virgule flottante

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
Tableau 2.1 Erreur d'arrondi. (L'exemple ci-dessus présente une chaîne formatée ou f-string, qui est présentée dans le chapitre Objets.)

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 1.8×103081.8×10308 et −1.8×10308−1.8×10308, respectivement. Tenter de stocker une valeur en virgule flottante en dehors de l'intervalle (−1.8×10308,1.8×10308)(−1.8×10308,1.8×10308) entraîne une erreur de dépassement.

Ci-dessous, 3.02563.0256 et 3.05123.0512 peuvent être représentés, mais 3.010243.01024 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')
Tableau 2.2 Erreur de dépassement.

Concepts en pratique

Erreurs de virgule flottante

Pour chaque situation, quelle erreur se produit ?

1.
L'instruction result = 2.0 * (10.0 ** 500) affecte une valeur trop grande à la variable result.
  1. arrondi
  2. dépassement
2.
0.123456789012345678901234567890 * 0.1 produit 0.012345678901234568430878013601.
  1. arrondi
  2. dépassement

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.45
  • round(2.451) = 2

Faites le point

Exemples de la fonction round()

Concepts en pratique

Exemples de la fonction round()

3.
Quelle est la sortie de round(6.6) ?
  1. 6
  2. 6.6
  3. 7
4.
Quelle est la sortie de round(3.5, 2) ?
  1. 3
  2. 3.5
  3. 3.50
5.
Quelle est la sortie de round(12) ?
  1. 12.0
  2. 12
  3. 12.00
6.
Quelle est la sortie de round(0.1, 1) ?
  1. 0.1
  2. 0.10
  3. 0.1000000000000000055511151231257827021181583404541015625

À 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 bh2bh2, où b est la base et h est la hauteur.

  1. Calculez l'aire d'un triangle avec base = 7 et hauteur = 3.5.
  2. Arrondissez l'aire du triangle à une décimale.
  3. Arrondissez l'aire du triangle à la valeur entière la plus proche.