Arithmetique
En simple précision les nombres sont codés sur 32 bits, dont 1 bit de signe, 8 bits d'exposant et 23 bits de mantisse. En double précision les nombres sont codés sur 64 bits, dont 1 bit de signe, 11 bits d'exposant et 52 bits de mantisse. Sachant ceci, le nombre que nous cherchons doit avoir une période comprise entre 12 et 26.
Tout d'abord, pour mieux comprendre, nous donnons l'exemple vu en TD : x = 0.1. Nous faisons le programme en C et utilisons le debugger gdb, grâce à la commande ‘gdb’ et ensuite on transforme 0.1 en binaire grâce à ‘x/tw &x’, respectivement ‘x/tg &y’. x est le nom de la variable contenant le nombre décimal 0.1 en simple précision et y en double précision.
Session gdb pour x= 0.1
(gdb) list
1
2 #include
3
4 main ()
5 {
6
7 float x;
8 double y;
9 x=0.1;
10 y=0.1;
11 }
(gdb) break 11
Breakpoint 1 at 0x8048366: file periode.c, line 11.
(gdb) run
Starting program: /GM21/users/narmas/Bureau/arith /periode
Breakpoint 1, main () at periode.c:11
11 }
(gdb) print x
$3 = 0.100000001
(gdb) x /tw &x
0xbfec7c34: 00111101110011001100110011001101
(gdb) print y
$4 = 0.10000000000000001
(gdb) x /tg &y
0xbfec7c38: 001111111011100110011001100110011001100110011001100110011001
1010
Analyse des résultats:
Nous remarquons l'erreur relative sur x: 0.000000001 , respectivement sur y: 0.00000000000000001 .
Simple précision
bit du signe: 0 les 8 bits de l’exposant: 01111011 les 23 bits de la mantisse: 10011001100110011001101
Double précision
bit du signe: 0 les 11 bits de l’exposant: 01111111011 les 52 bits de la mantisse: 1001100110011001100110011001100110011001100110011010
La période est visible en simple et en double précision et sa longueur est 4