Nombres réels en binaire
Objectifs
- Écrire une partie fractionnaire avec les puissances négatives de 2
- Comprendre le principe de la virgule flottante (IEEE 754)
- Identifier les pièges des flottants en Python
Idée clé
Un réel se code souvent comme en notation scientifique, mais en base 2 :
La mantisse et l'exposant sont stockés sur un nombre fini de bits : beaucoup de décimaux (comme ) n'ont donc pas de représentation exacte.
Partie fractionnaire en binaire
Après la virgule : , , , …
Exemple : .
Méthode (partie décimale) : multiplier par 2 ; le chiffre avant la virgule est le prochain bit ; recommencer avec la partie fractionnaire.
| Étape | × 2 | Bit |
|---|---|---|
| 0,75 | 1,5 | 1 |
| 0,5 | 1,0 | 1 |
Ainsi .
Certains nombres (ex. ) donnent une suite infinie de bits → impossible à stocker exactement.
IEEE 754 (simple précision, 32 bits)
Format courant des float (souvent 64 bits en pratique ; le principe est le même).
| Signe (1) | Exposant (8) | Mantisse (23) |
|---|---|---|
| (biais 127) | bits après le 1. implicite |
Exemple travaillé :
- Binaire :
- Normaliser :
- Signe (positif)
- Exposant biaisé :
- Mantisse : bits après le
1.→11011puis compléter avec des 0
Pièges des flottants en Python
>>> 0.1 + 0.2
0.30000000000000004
>>> (3.3 + 2.1) * 4.2
22.680000000000003
Cause : et ne sont pas exacts en binaire. Conséquence : ne pas comparer des flottants avec == sans précaution.
# Tolérance
abs((0.1 + 0.2) - 0.3) < 1e-9 # True
# Ou Decimal pour de l'arithmétique décimale exacte
from decimal import Decimal
Decimal("0.1") + Decimal("0.2") == Decimal("0.3") # True
Piège fréquent
Croire que 0.1 + 0.2 == 0.3 est vrai « en maths donc en machine ». En flottant binaire, c'est souvent faux : ce n'est pas un bug Python, c'est la norme IEEE 754.
À retenir
- Après la virgule : puissances , , …
- Virgule flottante = signe + exposant + mantisse
- IEEE 754 stocke un nombre fini de bits → approximations
- Exposant stocké avec un biais (127 en simple précision)
- En Python,
float≈ IEEE 754 double (64 bits) - Comparer avec une tolérance, ou utiliser
Decimalsi besoin d'exactitude décimale