EGALITE ET CODAGE BINAIRE EN INFORMATIQUE

Le codage des nombres est en binaire dans de nombreux langages de programmation dont Python (entiers comme flottants).
Il est fini pour les nombres entiers mais peut être infini pour certains nombres décimaux (par exemples, 0.5, 0.25 ou 1.625 ont des codages finis en binaire contrairement à 0.1, 0.2 ou 0.6). C'est à ce moment que se pose la question de l'égalité des nombres flottants en informatique : 0.1+0.2=0.3 est le plus souvent faux lorsqu'on interroge un ordinateur alors que 0.1+0.6=0.7 est vrai. Bien que les codages des nombres utilisés dans ces deux égalités soient infinis, la machine n'utilise qu'un arrondi de ces codages. Les arrondis peuvent être identiques ou bien différents : ainsi les arrondis de 0.1+0.2 et de 0.3 sont différents alors que ceux de 0.1+0.6 et de 0.7 sont identiques. Ainsi dans un ordinateur, l'égalité des nombres (et l'affichage par conséquent) s'appuie sur l'égalité (et l'affichage) des arrondis des codages et pas sur celle des nombres proprement dits.
En informatique, on privilégiera les nombres entiers pour éviter cet écueil.
Pour permettre aux élèves de seconde de prendre conscience de cette difficulté, on propose une suite de l'exercice proposé précédemment qui s'appuie sur l'utilisation des programmes réalisés.
Il est possible de récupérer l'ensemble de l'exercice ici :   

 

On a choisi ici principalement des coordonnées non entières.
Que ce soient d'un point de vue mathématique ou d'un point de vue informatique, le quadrilatère est identifié comme un parallèlogramme non rectangle.
On revient ici sur le calcul à la main des coordonnées du milieu et de la distance entre deux points : c'est le processus inverse de ce qu'il a fallu faire pour réaliser les programmes.

 
On a aussi choisi ici principalement des coordonnées non entières.
Informatiquement, le quadrilatère est identifié comme un parallélogramme non rectangle alors que mathématiquement, c'est un rectangle.
Les élèves découvrent qu'ici l'égalité des longueurs est reconnue fausse par le programme utilisé. Les calculs mettent en défaut le programme informatique : les longueurs calculées sont ici des décimaux et non des irrationnels.
 
On a choisi ici uniquement des coordonnées non entières.
Informatiquement, le quadrilatère de la question a. est identifié comme n'étant ni un parallélogramme, ni un rectangle.
Dans le nouveau repère de la question b, avec des coordonnées devenues entières, le même quadrilatère est alors reconnu comme étant un rectangle.
La dernière question permettra de démontrer cette propriété quel que soit le repère choisi.
 
Les trois questions précédentes permettent de souligner la problématique posée par l’utilisation de nombres flottants en informatique lors de calculs ou de tests d’égalité.
Ce complément peut être proposé à des élèves plus performants pour gérer la diversité dans la classe.
Le codage binaire des nombres peut alors être éventuellement abordé.
Ainsi, le nombre décimal 0,625 qui se décompose en une somme finie de fractions décimales (6/10+2/100+5/1000) se décompose également en une somme finie de fractions binaires (1/2+0/4+1/8).
Par contre le nombre 0,1 égal à 1/10, possède une décomposition en une somme infinie de fractions binaires :
0,1=0/2+0/4+0/8+1/16+1/32+0/64+0/128+1/256+1/512+…
Tous les nombres décimaux possèdent une décomposition décimale limitée mais la plupart de ces nombres possèdent des décompositions binaires illimitées.
Python n’affiche qu’une approximation décimale de la valeur stockée en binaire. Cette approximation coïncide généralement avec l’écriture décimale mais peut poser problème dans certains calculs ou tests d’égalité.
La fonction Decimal() du module decimal permet de travailler avec davantage de précision. Elle possède un argument qui est une chaine de caractères : Decimal('0.1') ou bien Decimal(str(x)) lorsque x est un nombre (str(0.1) transforme le nombre 0.1 en la chaine de caractères '0.1').
Les fonctions ainsi définies dans le programme proposé permettent d’obtenir des résultats conformes aux situations présentées dans les trois questions de l’exercice.