par Ben314 » 21 Mar 2010, 18:03
Salut,
Fait attention a ta façon de rédiger : vu que A<0, tu as
-A = 01 000 000 , 101 (en prenant 8 bits pour la partie entière)
puis, en prenant le complément , tu obtient
A = 10 111 111 , 011
Attention aussi au fait que, si tu travaille sur 8 bits pour la partie entière et que tu utilise des négatifs, tu n'est sensé stocker que des nombres x tels que -12810 000 000, il va être interprété comme étant négatif (le premier chiffre vaut 1) et donc comme valant -128 (c'est pas super génant vu qu'on sait que tout les résultats sont corrects uniquement modulo 256).
A la rigueur, tu pourait écrire que 128=127,9999999... et donc le coder sous la forme 01 111 111 , 111 111 111.... qui correspond bien à un positif.
Ensuite, en calculant Y=A+B tu trouve :
A = 10 111 111 , 011
B = 10 000 000
---------------------
Y = 00 111 111 , 011 qui correspond à 63,375
Ce qui est cohérent avec -64.625 + 128, bien que la retenue de gauche soit "passée aux oubliettes"
En calculant Z=A-B tu trouve :
A = 10 111 111 , 011
B = 10 000 000
---------------------
Z = 00 111 111 , 011 qui correspond de nouveau à 63,375
C'est toujours cohérent vu que -64.625-128 = (-64.625+128)-256 et que, vu que l'on utilise que 8 bits pour la partie entière des nombres, on sait que les résultats sont valables à multiple de 256 prés.
Si tu voulais obtenir les "bons" résultats, il faudrait stocker tes nombres sur plus de 8 bits, c'est à dire, en prenant par exemple 12 bits :
A = 111 110 111 111 , 011
B = 000 010 000 000
donnent les bons résultats.
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius