Codage des décimaux : les flottants
Attendus
| Contenus | Capacités attendues |
|---|---|
| Représentation approximative des nombres réels : notion de nombre flottant | Calculer sur quelques exemples la représentation de nombres réels : 0.1, 0.25 ou 1/3. |
Petit rappel : la base 10
Intéressons nous à l'écriture d'un nombre décimal en base 10, comme par exemple 223,25
Codage de la partie entière
Nous savons tous ici, en base 10, que 223 se compose de :
- 3 unités,
- 2 dizaines
- 2 centaines.
Cela vient de la série de divisions ci-dessous, sur laquelle les restes fournissent le nombre d'unités (3), de dizaines (2) et de centaines (2 aussi)
On écrit alors 223 = 2 \times 100 + 2 \times 10 + 3 \times 1 : c'est sa décomposition en base 10
Codage de la partie décimale
Pour la partie décimale, 0.25, en base dix également, on a l'habitude de lire 2 dixièmes et 5 centièmes. Cela vient cette fois de multiplication par 10 :
-
0,25 \times 10 = 2.5: la partie entière indique le nombre de dixièmes (2) et la partie décimale restante est 0,5 -
0,5 \times 10 = 5: la partie entière indique le nombre de centièmes (5) et il n'y a plus de partie décimale à explorer.
On vient de voir que 0,25 = 2 \times \frac{1}{10} + 5 \times \frac{1}{100}
Ainsi on peut écrire : 223,25 = 2 \times 100 + 2 \times 10 + 3 + 2 \times \frac{1}{10} + 5 \times \frac{1}{100}
En notation scientifique, on obtient : 223,25= 2,2325 \times 10²
Définition
La notation scientifique est une façon de représenter les nombres décimaux. Elle consiste à exprimer le nombre sous la forme
\pm a\times 10^{n}, où\pmest appelé signe,aest un nombre décimal de l'intervalle[1 ; 10[appelé mantisse (ou significande) etnest un entier relatif appelé exposant.
En base 2
Codage de la partie entière
Pour la partie entière, c'est exactement le même principe mais en divisant cette fois par 2 :
On écrit alors : 223 = 1 \times 2⁰ + 1 \times 2¹ + 1 \times 2² +1 \times 2³ + 1 \times 2⁴ + 0 \times 2⁵ + 1 \times 2⁶ +1 \times 2⁷ : C'est sa décomposition en base 2.
Ainsi 223 = 11111011_2
Codage de la partie décimale
Pour la partie décimale, on procède comme en base 10 mais en multipliant par 2 au lieu de multiplier par 10 :
0,25 \times 2 = 0,5 : la partie entière vaut 0, la partie décimale restante est 0.50,5 \times 2 = 1,0: la parie entière vaut 1. il n'y a plus rien après la virgule donc nous avons terminé
On vient de voir que 0.25 = 0 \times 2^{-1} + 1 \times 2^{-2} : c'est sa décomposition en base 2
Ainsi, on peut écrire :
123,25 = 11011111,01_2- En notation scientifique en base 2 :
123,25 = 1,111101110_2 \times 2 ^7
Travail à faire
Trouvez l'écriture scientifique en base 2 des nombres décimaux ci-dessous :
- 8,5
- 12,125
Problème...
Cherchons maintenant l'écriture scientifique de 0,1 en base 2.
0,1 \times 2 = 0,2: partie entière 0 , la partie décimale restante est 0,20,2 \times 2 =
!! SPOILER plus bas, ne défilez pas avant d'avoir trouvé ! !!
Conclusion :
On ne peut coder de façon exacte le nombre 0,1 en base 2.
Et ce n'est pas le seul dans ce cas : la plupart des décimaux sont dans le même cas !
On est donc contraint de faire une approximation !!
Allons un peu dans la console de Thonny :
>>> 0.1 + 0.1 + 0.1 == 0.3
???
Ce n'est pas une erreur ou un bug de Python mais la conséquence d'une approximation liée au codage en base 2 :
>>> 0.1 + 0.1 + 0.1
???
Il n'est pas possible de coder un nombre décimal en valeur exacte en base 2.
On obtient une approximation du nombre décimal, et non le nombre en lui même.
Cette approximation est appelée nombre en virgule flottante et correspond au type float en Python.
IEEE-754
Voir https://www.youtube.com/watch?v=mtizhxkB-Zw&ab_channel=Wandida%2CEPFL
A compléter
Inspiré de Mieszczak Christophe CC BY SA

