Chapitre 3 : Représentation des nombres réels (flottants)¶
Programme officiel (B.O.)¶
B.O. spécial n° 1 du 22 janvier 2019 - NSI Première
| Contenus | Capacités attendues | Commentaires |
|---|---|---|
| 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. | 0.2 + 0.1 n'est pas égal à 0.3. Il faut éviter de tester l'égalité de deux flottants. Aucune connaissance précise de la norme IEEE-754 n'est exigible. |
1. Le problème : les nombres réels en machine¶
Les entiers se représentent de manière exacte en binaire. Mais les nombres à virgule posent un problème fondamental : il est impossible de représenter tous les nombres réels avec un nombre fini de bits.
En effet, entre deux nombres réels quelconques, il existe une infinité d'autres nombres réels. Avec un nombre fini de bits, on ne peut coder qu'un nombre fini de valeurs. La représentation sera donc forcément approximative dans la plupart des cas.
À retenir
Les nombres à virgule sont stockés dans les ordinateurs sous forme de nombres flottants (floating point numbers en anglais). Cette représentation est approximative : la plupart des nombres à virgule ne peuvent pas être représentés de manière exacte.
2. La notation scientifique : un point de départ¶
En mathématiques et en sciences, on utilise la notation scientifique pour écrire les très grands ou très petits nombres. Le principe est de séparer le nombre en deux parties :
- Un nombre compris entre 1 et 10 appelé la mantisse ;
- Une puissance de 10 appelée l'exposant.
| Nombre | Notation scientifique | Mantisse | Exposant |
|---|---|---|---|
| 3 750 | 3,75 × 10³ | 3,75 | 3 |
| 0,0042 | 4,2 × 10⁻³ | 4,2 | -3 |
| 602 200 000 000 000 000 000 000 | 6,022 × 10²³ | 6,022 | 23 |
La virgule « flotte » en se déplaçant grâce à l'exposant : c'est l'origine du terme nombre flottant ou virgule flottante.
3. La virgule flottante en binaire¶
Dans un ordinateur, le même principe est appliqué, mais en base 2. Un nombre flottant est stocké sous la forme :
signe × mantisse × 2^exposant^
L'ordinateur mémorise trois informations dans un nombre fixe de bits :
| Composante | Rôle |
|---|---|
| Signe | 1 bit : 0 pour positif, 1 pour négatif |
| Exposant | Détermine l'ordre de grandeur (la position de la virgule) |
| Mantisse | Les chiffres significatifs du nombre |
Pas de norme à connaître
Le B.O. précise qu'aucune connaissance précise de la norme IEEE-754 n'est exigible. Il suffit de comprendre le principe de la représentation et ses limites.
4. Fractions binaires¶
Tout comme on peut écrire des nombres à virgule en base 10, on peut le faire en base 2. Les positions après la virgule correspondent aux puissances négatives de 2 :
| Position | ... | 2¹ | 2⁰ | , | 2⁻¹ | 2⁻² | 2⁻³ | 2⁻⁴ | ... |
|---|---|---|---|---|---|---|---|---|---|
| Valeur | ... | 2 | 1 | , | 0,5 | 0,25 | 0,125 | 0,0625 | ... |
Quelques exemples de conversion¶
Exemple : convertir 0,75 en binaire
- 0,75 >= 0,5 = 2⁻¹ ? Oui. On écrit 1. Reste : 0,75 - 0,5 = 0,25.
- 0,25 >= 0,25 = 2⁻² ? Oui. On écrit 1. Reste : 0.
Résultat : \((0,75)_{10}\) = \((0,11)_2\)
Vérification : 1 × 0,5 + 1 × 0,25 = 0,75 ✓
Exemple : convertir 0,25 en binaire
- 0,25 >= 0,5 ? Non. On écrit 0.
- 0,25 >= 0,25 ? Oui. On écrit 1. Reste : 0.
Résultat : \((0,25)_{10}\) = \((0,01)_2\)
Ce nombre se représente exactement en binaire.
Exemple : convertir 0,1 en binaire
- 0,1 >= 0,5 ? Non. On écrit 0.
- 0,1 >= 0,25 ? Non. On écrit 0.
- 0,1 >= 0,125 ? Non. On écrit 0.
- 0,1 >= 0,0625 ? Oui. On écrit 1. Reste : 0,1 - 0,0625 = 0,0375.
- 0,0375 >= 0,03125 ? Oui. On écrit 1. Reste : 0,0375 - 0,03125 = 0,00625.
- Et on continue...
Résultat : \((0,1)_{10}\) = \((0,000110011001100110011...)_2\)
La suite 0011 se répète indéfiniment. Ce nombre ne peut pas être représenté exactement en binaire, quelle que soit la précision.
Méthode systématique : multiplications successives par 2¶
Pour convertir la partie décimale d'un nombre en binaire, on peut aussi procéder par multiplications successives par 2 en ne gardant que la partie entière à chaque étape :
Méthode appliquée à 0,1
| Étape | Multiplication | Partie entière | Partie décimale |
|---|---|---|---|
| 1 | 0,1 × 2 = 0,2 | 0 | 0,2 |
| 2 | 0,2 × 2 = 0,4 | 0 | 0,4 |
| 3 | 0,4 × 2 = 0,8 | 0 | 0,8 |
| 4 | 0,8 × 2 = 1,6 | 1 | 0,6 |
| 5 | 0,6 × 2 = 1,2 | 1 | 0,2 |
| 6 | 0,2 × 2 = 0,4 | 0 | 0,4 |
| ... | Le cycle recommence | ... | ... |
On lit les parties entières de haut en bas : \((0,1)_{10}\) = \((0,\overline{0001100110011...})_2\)
5. Les erreurs d'arrondi¶
Puisque la mantisse a un nombre fini de bits, les nombres qui ont une représentation binaire infinie sont tronqués. Cette troncature provoque des erreurs d'arrondi.
5.1 Le piège classique : 0,1 + 0,2¶
Ce résultat surprenant n'est pas un bug de Python. C'est une conséquence directe du fait que ni 0,1, ni 0,2, ni 0,3 ne peuvent être représentés exactement en binaire. Les petites erreurs d'arrondi s'accumulent.
5.2 Autres exemples¶
>>> 0.1 + 0.1 + 0.1
0.30000000000000004
>>> 1/3
0.3333333333333333
>>> 1/3 + 1/3 + 1/3
1.0 # ici, Python compense l'erreur
>>> 0.1 * 3
0.30000000000000004
>>> 0.1 * 10
1.0000000000000002
5.3 Accumulation des erreurs¶
Les erreurs d'arrondi sont infimes pour un seul calcul, mais elles peuvent s'accumuler au fil de nombreuses opérations :
>>> somme = 0.0
>>> for i in range(1000):
... somme += 0.001
>>> somme
0.9999999999999062 # au lieu de 1.0
Après 1 000 additions de 0,001, le résultat n'est pas exactement 1.
6. Règles à respecter avec les flottants¶
Règle n° 1 : ne jamais tester l'égalité de deux flottants
Ne jamais écrire :
Utiliser plutôt une marge de tolérance (epsilon) :
Règle n° 2 : utiliser des entiers quand c'est possible
Pour manipuler des montants en euros, on travaille en centimes (entiers) plutôt qu'en euros (flottants).
Règle n° 3 : attention aux comparaisons
Les opérateurs <, >, <=, >= fonctionnent généralement bien avec les flottants. C'est l'égalité stricte (==) qui est problématique.
7. Quels nombres sont représentés exactement ?¶
Un nombre décimal est représentable exactement en binaire si et seulement si il peut s'écrire sous la forme d'une fraction dont le dénominateur est une puissance de 2.
| Nombre | Fraction | Dénominateur est une puissance de 2 ? | Exact en binaire ? |
|---|---|---|---|
| 0,5 | 1/2 | Oui (2¹) | ✅ Oui |
| 0,25 | 1/4 | Oui (2²) | ✅ Oui |
| 0,75 | 3/4 | Oui (2²) | ✅ Oui |
| 0,125 | 1/8 | Oui (2³) | ✅ Oui |
| 0,1 | 1/10 | Non (10 = 2 × 5) | ❌ Non |
| 0,2 | 1/5 | Non (5 n'est pas une puissance de 2) | ❌ Non |
| 0,3 | 3/10 | Non | ❌ Non |
| 1/3 | 1/3 | Non | ❌ Non |
8. Résumé¶
| Concept | Détail |
|---|---|
| Nombre flottant | Représentation approximative d'un nombre réel sous la forme signe × mantisse × 2^exposant^ |
| Erreurs d'arrondi | 0,1 + 0,2 ≠ 0,3 en machine : conséquence de la représentation binaire finie |
| Exactitude | Seules les fractions dont le dénominateur est une puissance de 2 sont exactes |
| Règle fondamentale | Ne jamais tester l'égalité de deux flottants avec == |
| Alternative | Utiliser une marge de tolérance : abs(a - b) < epsilon |
| Bonne pratique | Préférer les entiers quand c'est possible (centimes au lieu d'euros) |