Poster une réponse 
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 :
123 0,625 0,1
100 + 20 + 3
1 x 102 + 2 x 101 + 3 x 100
0,6 + 0,02 + 0,005
6 x 10-1 + 2 x 10-2 + 5 x 10-3
0,1
1 x 10-1


Ecriture binaire des nombres en Informatique

En Informatique, nous n'utilisons que 2 chiffres : 0 et 1 hein
En Informatique, les nombres sont écrit en base 2 (ou en binaire)
Exemples :
123 0,625 0,1
64 + 32 +16 + 8 + 2 + 1
1 x 26+ 1 x 25 + 1 x 24 + 1 x 23 + 0 x 22 + 1 x 21+ 1 x 20
1 x 0,5 + 0 x 0,25 + 1 x 0,125
1 x 2-1 + 0 x 2-2 + 1 x 2-3
?
1111011 en binaire 0.101 en binaire ?

flecherouge 0,1 ne peut pas s'écrire en binaire ph34r
0,1 est le nombre périodique suivant :
0.0001100110011001100110011001100110011001100110011... hum

Et là est tout le problème..!
Voyez plutôt... surprised

[Image: pytarrondi0.png]



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 hoho

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 cole

La façon la plus simple, en général, de corriger l'affichage
est d'utiliser les fonctions floor, ceil ou round (voir ici)

[Image: pytarrondi1.png]



(voir la doc Python sur la représentation des nombres en virgule flottante ici)

[Image: 118.gif]
Visiter le site internet de cet utilisateur Trouver tous les messages de cet utilisateur
Citer ce message dans une réponse Return to top
Poster une réponse