On rappelle que l’encodage des nombres flottants s’effectue de la façon suivante:

s m2n s\ m \cdot 2^n

  • ss est le signe représenté par le bit de poids fort:

    • s=0s=0 : signe ++
    • s=1s=1 : signe -
  • nn est l’exposant représenté par un entier relatif décalé de 2e112^{e-1} - 1 (e représente le nombre de bits de l’exposant)

  • mm est la mantisse qui est un nombre binaire à virgule compris entre 1 inclus et 2 exclus. Le seul chiffre avant la virgule étant toujours 1, il n’est pas représenté(on le dit implicite), et le codage binaire de la mantisse représente donc uniquement les chiffres après la virgule qui sont en base 2 des demis, des quarts, des huitièmes…

repr float

Représentation générale d’un nombre à virgule flottante

Encodage sur un octet

On considère des nombres flottants encodés sur un octet avec:

  • 1 bit de signe,
  • 3 bits d’exposant,
  • 4 bits de mantisse.
  1. Calculer le décalage de l’exposant. Quel est l’intervalle d’exposant accessible?

  2. Trouver les nombres à virgule représentés par les mots binaires suivants:

    • 0111 1000
    • 1001 0001
  3. Donner les représentations binaires des nombres flottants suivants:

    • 2,5=1,25×212,5=1,25 \times 2^1 .
    • 1,125=1,125×20-1,125=-1,125 \times 2^0 .

Encodage demi-précision sur 16 bits

On considère des nombres flottants encodés sur deux octets avec:

  • 1 bit de signe,
  • 5 bits d’exposant,
  • 10 bits de mantisse.
  1. Calculer le décalage de l’exposant. Quel est l’intervalle d’exposant accessible?

  2. Trouver les nombres à virgule représentés par les mots binaires suivants:

    • 01000000 10000000
    • 11000000 00100000
  3. Donner les représentations binaires des nombres flottants suivants:

    • 6,5=1.625×22-6,5=-1.625\times 2^{2} .
    • 0,017578125=1,125×260,017578125=1,125\times 2^{-6} .

Encodage simple précision sur 32 bits

On considère des nombres flottants encodés sur 32 bits avec:

  • 1 bit de signe,
  • 8 bits d’exposant
  • 23 bits de mantisse.
  1. Calculer le décalage de l’exposant. Quel est l’intervalle d’exposant accessible?

  2. Trouver les nombres à virgule représentés par les mots binaires suivants

    • 00111111 11000000 00000000 00000000
    • 10111110 00000000 00000000 00000000
  3. Donner les représentations binaires des nombres flottants suivants:

    • 4,5=1,125×22-4,5=-1,125 \times 2^{2} .
    • 0,046875=1,5×250,046875=1,5 \times 2^{-5} ).

Exercice Python n°1

On considère le programme suivant:

x = 1.0
y = x + 1.0
while y - x == 1.0:
    x = x * 2.0
    y = x + 1.0
print("Terminé, y=", y)
  1. Si l’on calculait sur des nombres rationnels exacts, que se passerait-il lors de l’exécution de ce programme ?

  2. Écrire ce programme et l’exécuter. Que constate-t-on ?

  3. Modifier le programme de façon à déterminer au bout de combien d’exécutions du corps de la boucle il s’arrête, ainsi que la valeur de x à la fin de cette exécution.

  4. Comment est représentée cette dernière valeur de x ? Et celle de y ?

On pourra utiliser un convertisseur en ligne comme: http://www.binaryconvert.com/convert_double.html

  1. Proposer une explication de ce comportement.

Exercice Python n°2

On considère le programme suivant:

a = 0.0
for _ in range(0, 10):
    a = a + 0.1
    print(a)
  1. Si l’on calculait sur des nombres rationnels exacts, que se passerait-il lors de l’exécution de ce programme ?

  2. Écrire ce programme et l’exécuter. Que constate-t-on ?

  3. Vérifier avec le convertisseur en ligne que la représentation binaire de 0,1 est 0_01111111011_1001100110011001100110011001100110011001100110011010.

    Quel nombre décimal cette représentation désigne-t-elle en réalité ?

  4. Expliquer le résultat obtenu.

Source

Informatique et sciences du numérique Spécialité ISN en terminale S - Avec des exercices corrigés et des idées de projets par Gilles Dowek