Files
1ereNSI/representation_base/seance_3
..
2021-09-01 18:26:16 +02:00
2021-09-01 18:26:16 +02:00
2021-09-01 18:26:16 +02:00

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)

partie entière base 10

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ù \pm est appelé signe, a est un nombre décimal de l'intervalle [1 ; 10[ appelé mantisse (ou significande) et n est 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 :

partie entière base 10

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.5
  • 0,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,2
  • 0,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