Exercices

Chapitre 3: Représentation des nombres à virgule

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

sm2n s\ m \cdot 2^n

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

1 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.

2 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}.

3 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}).

4 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.

5 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.

5.0.1 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