Livre_silo 30 août 2013 16:32 Page 50
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
50
Informatique pour tous
Exercice 2.47
1 Quel est le plus grand nombre que l’on peut représenter en virgule flottante sur 64 bits ?
2 Quel est le plus petit nombre, donc négatif, que l’on peut représenter en virgule flottante sur 64 bits ?
3 Quel est le plus petit nombre normalisé strictement positif que l’on peut représenter en virgule flottante
sur 64 bits ?
Il est à noter qu’en Python, la commande float_info de la bibliothèque sys fournit ces informations,
ainsi que la plupart des caractéristiques de la représentation des nombres en virgule flottante : taille de
la mantisse, différence relative entre deux valeurs consécutives, etc. (Attention, les valeurs possibles pour
l’exposant sont décalées d’une unité.)
Exercice 2.48 Reprendre les questions de l’exercice précédent pour les nombres à virgule flottante simple
précision : ceux-ci sont représentés sur 32 bits, avec 1 bit de signe, 8 bits d’exposant et 23 bits de mantisse.
Ils sont utilisés dans certains langages de programmation, notamment pour des raisons d’économie de
mémoire et de rapidité des calculs ; en Python cependant, leur utilisation n’apporterait pas un bénéfice
significatif.
Exercice 2.49 Déterminer l’écriture binaire et une valeur décimale approchée du plus grand nombre à
virgule flottante sur 64 bits strictement inférieur à 1.
Même question avec le plus petit nombre strictement supérieur à 1.
Exercice 2.50 * En s’inspirant de l’algorithme de conversion des entiers naturels en base k, concevoir un
algorithme de conversion d’un nombre décimal vers son écriture en virgule flottante.
On pourra commencer par le cas des nombres compris entre 1 et 2, pour lesquels l’exposant est connu.
On traitera ensuite les nombres inférieurs à 1 ou supérieurs à 2 en se ramenant au cas précédent.
Enfin, pour que l’algorithme soit complet, on n’oubliera pas le signe.
Exercice 2.51 * Cet exercice a pour objectif d’étudier l’intérêt des nombres dénormalisés et quelquesunes de leurs particularités.
1 Soit x 1 le plus petit nombre à virgule flottante normalisé strictement positif représentable sur 64 bits,
et x 2 le plus petit nombre représentable strictement supérieur à x 1 .
Calculer x 1 et x 2 . Combien vaut l’écart relatif
x 2 − x 1
x 1 − 0
?
2 Refaire la même étude avec les deux plus petits nombres dénormalisés y 1 et y 2 .
3 Calculer également l’écart relatif
y 2 − y 1
x 2 − x 1
et interpréter ce résultat en termes de densité des nombres
représentables dans différents intervalles.
4 Expliquer pourquoi l’exposant des nombres dénormalisés doit être −1 022 et non pas −1 023 comme
serait interprété l’exposant 00000000000 dans le cas d’un nombre normalisé.
Exercice 2.52 Quelle précision perd-on si on divise par deux un nombre à virgule flottante sur 64 bits
avant de le remultiplier par deux ?
Exercice 2.53 Montrer que, pour comparer deux nombres à virgule flottante de même signe, il suffit de
les comparer bit par bit : si leurs bits les plus à gauche sont différents, celui dont ce bit vaut 1 est le plus
grand ; sinon on compare leurs bits suivants jusqu’à trouver deux bits différents pour pouvoir appliquer
cette règle.
(Cette règle ne s’applique bien entendu pas aux infinis et aux NaN, dont on rappelle que l’exposant vaut
11111111111.)
Exercice 2.54 *
1 Montrer qu’à chaque multiplication de deux nombres à virgule flottante, comme on arrondit le calcul
en ne gardant que 52 chiffres après la virgule, on introduit une erreur relative de l’ordre de 2 −52 .
2 Quelle est la valeur de cette erreur en base dix ?
3 Si on fait plusieurs multiplications, ces erreurs s’accumulent. Quelle est l’erreur relative d’un calcul qui
est formé d’un million de multiplications, qui dure quelques millisecondes sur un ordinateur usuel ?
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
50
Informatique pour tous
Exercice 2.47
1 Quel est le plus grand nombre que l’on peut représenter en virgule flottante sur 64 bits ?
2 Quel est le plus petit nombre, donc négatif, que l’on peut représenter en virgule flottante sur 64 bits ?
3 Quel est le plus petit nombre normalisé strictement positif que l’on peut représenter en virgule flottante
sur 64 bits ?
Il est à noter qu’en Python, la commande float_info de la bibliothèque sys fournit ces informations,
ainsi que la plupart des caractéristiques de la représentation des nombres en virgule flottante : taille de
la mantisse, différence relative entre deux valeurs consécutives, etc. (Attention, les valeurs possibles pour
l’exposant sont décalées d’une unité.)
Exercice 2.48 Reprendre les questions de l’exercice précédent pour les nombres à virgule flottante simple
précision : ceux-ci sont représentés sur 32 bits, avec 1 bit de signe, 8 bits d’exposant et 23 bits de mantisse.
Ils sont utilisés dans certains langages de programmation, notamment pour des raisons d’économie de
mémoire et de rapidité des calculs ; en Python cependant, leur utilisation n’apporterait pas un bénéfice
significatif.
Exercice 2.49 Déterminer l’écriture binaire et une valeur décimale approchée du plus grand nombre à
virgule flottante sur 64 bits strictement inférieur à 1.
Même question avec le plus petit nombre strictement supérieur à 1.
Exercice 2.50 * En s’inspirant de l’algorithme de conversion des entiers naturels en base k, concevoir un
algorithme de conversion d’un nombre décimal vers son écriture en virgule flottante.
On pourra commencer par le cas des nombres compris entre 1 et 2, pour lesquels l’exposant est connu.
On traitera ensuite les nombres inférieurs à 1 ou supérieurs à 2 en se ramenant au cas précédent.
Enfin, pour que l’algorithme soit complet, on n’oubliera pas le signe.
Exercice 2.51 * Cet exercice a pour objectif d’étudier l’intérêt des nombres dénormalisés et quelquesunes de leurs particularités.
1 Soit x 1 le plus petit nombre à virgule flottante normalisé strictement positif représentable sur 64 bits,
et x 2 le plus petit nombre représentable strictement supérieur à x 1 .
Calculer x 1 et x 2 . Combien vaut l’écart relatif
x 2 − x 1
x 1 − 0
?
2 Refaire la même étude avec les deux plus petits nombres dénormalisés y 1 et y 2 .
3 Calculer également l’écart relatif
y 2 − y 1
x 2 − x 1
et interpréter ce résultat en termes de densité des nombres
représentables dans différents intervalles.
4 Expliquer pourquoi l’exposant des nombres dénormalisés doit être −1 022 et non pas −1 023 comme
serait interprété l’exposant 00000000000 dans le cas d’un nombre normalisé.
Exercice 2.52 Quelle précision perd-on si on divise par deux un nombre à virgule flottante sur 64 bits
avant de le remultiplier par deux ?
Exercice 2.53 Montrer que, pour comparer deux nombres à virgule flottante de même signe, il suffit de
les comparer bit par bit : si leurs bits les plus à gauche sont différents, celui dont ce bit vaut 1 est le plus
grand ; sinon on compare leurs bits suivants jusqu’à trouver deux bits différents pour pouvoir appliquer
cette règle.
(Cette règle ne s’applique bien entendu pas aux infinis et aux NaN, dont on rappelle que l’exposant vaut
11111111111.)
Exercice 2.54 *
1 Montrer qu’à chaque multiplication de deux nombres à virgule flottante, comme on arrondit le calcul
en ne gardant que 52 chiffres après la virgule, on introduit une erreur relative de l’ordre de 2 −52 .
2 Quelle est la valeur de cette erreur en base dix ?
3 Si on fait plusieurs multiplications, ces erreurs s’accumulent. Quelle est l’erreur relative d’un calcul qui
est formé d’un million de multiplications, qui dure quelques millisecondes sur un ordinateur usuel ?
