Les approximations dans les calculs de Python...
|
22-06-2024, 06:29 PM
Message : #1
|
||||||||||||||||
|
||||||||||||||||
Les approximations dans les calculs de Python...
Ecriture décimale des nombres en Mathématiques
En Mathématiques (et dans la vie de tous les jours...), pour écrire les nombres, nous utilisons 10 chiffres : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 et 10 Les nombres décimaux peuvent s'écrire avec un nombre fini de chiffres après la virgule Exemples : • 615/5 peut s'écrire 123 ou bien 123,0 (c'est un nombre entier, cas particulier de nombre décimal : voir ici...) • 5/8 peut s'écrire 0,625 • 1/10 peut s'écrire 0,1 Les nombres non décimaux ont des décimales infinies Ils ont une infinité de chiffres après la virgule On ne peut donc pas les écrire exactement Exemples : • 1/3 --> 0,333333333333333....................... • 5/7 --> 0,714285714285714285....................... (1/3 et 5/7 sont des nombres périodiques) • π --> 3,1415926535897....................... • √2 --> 1,414213562....................... On peut seulement écrire une valeur décimale approchée • 1/3 ≃ 0,333333333333333 • 5/7 ≃ 0,714285714285714285 • π ≃ 3,1415926535897 • √2 ≃ 1,414213562 En Mathématiques, les nombres décimaux sont écrit en base 10 (ou en décimal) Exemples :
Ecriture binaire des nombres en Informatique En Informatique, nous n'utilisons que 2 chiffres : 0 et 1 ![]() En Informatique, les nombres sont écrit en base 2 (ou en binaire) Exemples :
![]() ![]() 0,1 est le nombre périodique suivant : 0.0001100110011001100110011001100110011001100110011... ![]() Et là est tout le problème..! Voyez plutôt... ![]() ![]() Autre exemple : l'opération 0,6 + 0,7 ne pose aucun problème en Mathématiques (résultat 1,3) Avec Python, 0,6 + 0,7 = 1,2999999999999998 ![]() En effet, 0,6 et 0,7 ne peuvent pas s'écrire en binaire Ces nombres vont donc être codés par des approximations, et quand on fait des opérations avec des approximations... on obtient des résultats... encore plus approximatifs..! Les dernières versions de Python ont progressé pour pallier au mieux à ces "problèmes" (peut-être qu'avec votre version, 0,6 + 0,7 est bien égal à 1,3) mais en, général, les résultats sont approchés, voire très approchées si on fait des opérations multiples ![]()
![]() (voir la doc Python sur la représentation des nombres en virgule flottante ici) ![]() |
||||||||||||||||