Numérique et sciences informatiques (NSI) · Première

Les nombres flottants et l’encodage du texte

Pourquoi Python affiche-t-il False quand on teste 0.1 + 0.2 == 0.3 ? Pourquoi un « é » devient-il parfois « é » sur une page Web ? Ces deux surprises viennent de la façon dont la machine code les nombres à virgule et les caractères. Ce chapitre explique ces deux représentations.

Une question sur ce cours ?

ULU, le tuteur d’ULUMINE, t’aide à partir de ce cours.

Séance guidée avec ULU (≈ 10 min)Diagnostic, explication, exercices adaptés et bilan.

Objectifs

  • Écrire en binaire un nombre à virgule simple et convertir un binaire à virgule en décimal
  • Savoir que les flottants sont des valeurs approchées et ne pas tester leur égalité
  • Connaître le principe du codage d’un flottant (signe, exposant, mantisse)
  • Connaître les encodages ASCII, ISO-8859-1 et Unicode (UTF-8) et utiliser ord() et chr()

1. Les nombres à virgule en binaire

Après la virgule, les bits ont pour poids les puissances négatives de 2 : = 0,5 ; = 0,25 ; = 0,125 ; = 0,0625…

2. Les flottants

Flottant : Un flottant (type float en Python) code un nombre sous la forme signe × mantisse × 2exposant, comme une écriture scientifique en base 2. La norme IEEE 754 utilise 64 bits en double précision : 1 bit de signe, 11 bits d’exposant et 52 bits de mantisse.

Les erreurs d’arrondi peuvent s’accumuler : ajouter dix fois 0.1 donne 0.9999999999999999 et non 1.0. Une boucle while x != 1.0 qui ajoute 0.1 à x ne s’arrête donc jamais.

3. Coder les caractères

Encodage : Un encodage associe à chaque caractère un nombre, puis une suite d’octets. Pour lire correctement un texte, il faut connaître l’encodage avec lequel il a été écrit.

  • En ASCII : 'A' = 65, 'Z' = 90, 'a' = 97, '0' = 48, l’espace = 32. Minuscule = majuscule + 32.
  • En Unicode, « é » a le point de code U+00E9 (233) ; en UTF-8, il occupe 2 octets (C3 A9).
  • Si un texte UTF-8 est lu comme du latin-1, chacun de ces 2 octets devient un caractère : « é » s’affiche « é ».

À retenir

  • Après la virgule, les bits valent , , … ; on convertit par multiplications successives par 2.
  • Beaucoup de décimaux (comme 0,1) n’ont pas d’écriture binaire finie : les flottants sont des valeurs approchées.
  • On ne compare pas deux flottants avec == mais avec abs(a − b) < epsilon.
  • ASCII : 7 bits, 128 caractères ; ISO-8859-1 : 8 bits ; Unicode + UTF-8 : tous les caractères, 1 à 4 octets.
  • ord(c) donne le code d’un caractère, chr(n) le caractère d’un code.

Et maintenant, à toi !

Vérifie que tu as compris avec les exercices, puis révise avec la fiche.

À découvrir aussi

Première · Numérique et sciences informatiques (NSI)

Représenter les entiers : binaire, hexadécimal, complément à deux

Écrire un entier en base 2 et en base 16, passer d’une base à l’autre, coder les entiers relatifs en complément à deux : cours et exercices de NSI en Première.