On rappelle que l’encodage des flottants s’effectue de la façon suivante:
$$ s\ m \cdot 2^n $$
$n$ est l’exposant représenté par un entier relatif décalé de $2^{e-1} - 1$ (e représente le nombre de bits de l’exposant)
$m$ 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…
On considère des nombres flottants encodés sur un octet avec dans l’ordre:
0111 1000
1001 0001
On considère des nombres flottants encodés sur 64 bits avec dans l’ordre:
1 10001000110 1001001111000011100000000000000000000000000000000000
0 00100000011 1101001110010101100000000000000000000000000000000000
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
Si l’on calculait sur des nombres rationnels exacts, que se passerait-il lors de l’exécution de ce programme ?
Écrire ce programme et l’exécuter. Que constate-t-on ?
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.
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
On considère le programme suivant:
a = 0.0
for loop in range(0,10):
a = a + 0.1
print(a)
Si l’on calculait sur des nombres rationnels exacts, que se passerait-il lors de l’exécution de ce programme ?
Écrire ce programme et l’exécuter. Que constate-t-on ?
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é ?