Ajout première séquence
This commit is contained in:
157
representation_base/seance_3/README.md
Normal file
157
representation_base/seance_3/README.md
Normal file
@@ -0,0 +1,157 @@
|
||||
# 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ù $`\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 :
|
||||
|
||||

|
||||
|
||||
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 :
|
||||
|
||||
```Python
|
||||
>>> 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 :
|
||||
|
||||
```python
|
||||
>>> 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
|
||||
Reference in New Issue
Block a user