Aller au contenu

QCM
Les Flottants

Rappel

Les questions ci-dessous sont là pour vous aider à contrôler ce que vous avez retenu.
Si vous ne répondez pas à toutes les questions sans hésitation, c'est sans doute qu'il faut retravailler les pages précédentes.

Pour chaque question, il faut trouver la (ou les) bonne(s) réponse(s).

QCM 1

Quelle est la valeur affichée à l'exécution des instructions suivantes ?

1
2
3
4
x = 1.0
while x != 0.0:
    x = x - 0.5
print(x)
  • 0.0
  • 0.000001
  • -0.000001
  • Aucune car la boucle est infinie : x ne prend jamais exactement pour valeur 0.0
Réponse
  • 0.0
  • 0.000001
  • -0.000001
  • Aucune car la boucle est infinie : x ne prend jamais exactement pour valeur 0.0

En effet, 0.5 est représenté de manière exacte en flottant.

QCM 2

Quelle est la valeur affichée à l'exécution des instructions suivantes ?

1
2
3
4
x = 1.0
while x != 0.0:
    x = x - 0.1
print(x)
  • 0.0
  • 0.000001
  • -0.000001
  • Aucune car la boucle est infinie : x ne prend jamais exactement pour valeur 0.0
Réponse
  • 0.0
  • 0.000001
  • -0.000001
  • Aucune car la boucle est infinie : x ne prend jamais exactement pour valeur 0.0

En effet, 0.1 est représenté de manière approchée en flottant.

QCM 3

Un réel x s'écrit (11,11)_2 en base deux.
Quelle est son écriture en base dix ?

  • 3,3
  • 3,75
  • 75,75
  • 75,3
Réponse
  • 3,3
  • 3,75
  • 75,75
  • 75,3

En effet (11,11)_2 = 1 \times 2^1 + 1 \times 2^0 + \frac{1}{2^1} + \frac{1}{2^2} = 3,75.

QCM 4

Voici le code d'une fonction définie en Python :

1
2
3
4
5
6
7
def nombre_etapes(borne):
    nombre = 0
    compteur = 0
    while nombre != borne:
        nombre = nombre + 0.1
        compteur = compteur + 1
    return compteur

Que renvoie la console après l'exécution de l'instruction suivante ?

>>> nombre_etapes(1.0)
  • 10
  • 11
  • Une erreur
  • Aucune des réponses précédentes n'est correcte
Réponse
  • 10
  • 11
  • Une erreur
  • Aucune des réponses précédentes n'est correcte

Le programme va tourner indéfiniment. Les additions se font avec le représentant de 0.1 en machine, qui n'est pas égal à 0,1 comme on l'a vu dans ce chapitre.

  • Avec dix termes 0.1 :

    >>> 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1
    0.9999999999999999
    
  • Avec onze termes 0.1 :

    >>> 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1
    1.0999999999999999
    

Ainsi, la variable nombre n'aura jamais la valeur 1.0.

Important

Encore une fois, n'utilisez pas les comparateurs « == » ou « != » avec les flottants.

QCM 5

On exécute les instructions suivantes :

>>> a = 1 + (-1) + 10**(-40)
>>> b = 10**(-40) + 1 + (-1)
Alors :

  • les valeurs désignées par a et b sont égales.
  • les valeurs désignées par a et b ne sont pas égales.
Réponse
  • les valeurs désignées par a et b sont égales.
  • les valeurs désignées par a et b ne sont pas égales.

Dans le cas 1, le calcul 1-1+ 10**(-40) est 0 + 10**(-40) = 10**(-40).

Dans le cas 2, le calcul 1/10**(-40) + 1 -1 est 1 -1 = 0 (car 1/10**(-40) + 1 donne 1 avec les problèmes d'arrondis liés à la représentation des flottants).