On a vue ensemble l’écriture binaire de nombres décimaux.
Il reste à voir comment ils peuvent être codés en mémoire. Pour cela, les normes en vigueur définissent les flottants, en simple précision sur 32 bits (float
), et en double précision sur 64 bits (double
).
Je vous propose de commencer par ce petit test pour rassembler vos connaissances et découvrir et vous frotter aux difficultés du jour :
On ne triche pas et on cherche avant de continuer !
On suppose que vous avez bien cherché… On va tout détailler !
On explique pourquoi :
>>> 0.1 + 0.1 + 0.1 0.30000000000000004 >>>
Remarque : attention aux codes avec les flottants !
« 0.2 + 0.1 n’est pas égal à 0.3. Il faut éviter de tester l’égalité de deux flottants. »
Illustrons-le avec un petit code python
très maladroit :
nombre = 0.1 while nombre != 1 : nombre += 0.1 print(nombre)
Il faut en effet éviter de tester l’égalité de deux flottants :
>>> ======== RESTART: cm 2020-02-03 NSI exemple1.py ======== 0.2 0.30000000000000004 0.4 0.5 0.6 0.7 0.7999999999999999 0.8999999999999999 0.9999999999999999 1.0999999999999999 1.2 1.3 ...
Il nous a fallu une interruption (Ctrl-C
) pour ce programme qui tournait en boucle infinie !
Conclusion pour l’oral du bac ISN ?
Encore un exercice ?
A mettre en simple précision sur 32 bits.
On peut vérifier avec ce convertisseur :
- 6,625 donne 01000000 11010100 00000000 00000000
- 5,4375 donne 01000000 10101110 00000000 00000000