Ajout première séquence

This commit is contained in:
2021-09-01 18:26:16 +02:00
parent 0e90b28984
commit 612a3ac706
63 changed files with 2519 additions and 0 deletions

View 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)
![partie entière base 10](assets/div1base10.jpg)
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](assets/div1base2.jpg)
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