Nombres réels en binaire

DarkPeace -  
Marden Messages postés 1075 Statut Membre -
sur la page http://www.commentcamarche.net/base/representation.php3
il y a un exemple qui dit que...
525,5 s'écrit en base 2 de la façon suivante:
1000001101,1

...mais je ne comprend pas comment ,1 pour peut représenter ,5
d'où ça vient le ,1 ?

1 réponse

Marden Messages postés 1075 Statut Membre 210
 
A droite de la virgule :
le premier chiffre correspond à (2 puissance -1 soit 0.5),
le second chiffre correspond à (2 puissance -2, soit 0.25),
etc
1
DarkPeace Messages postés 4 Statut Membre
 
Dis-moi si je me trompe, mais de cette façon c'est très difficile (ou impossible) de représenter des nombres précis. Par exemple 5,37.
Comment tu l'écrirais toi?
(sous la forme 101,...)
0
Marden Messages postés 1075 Statut Membre 210 > DarkPeace Messages postés 4 Statut Membre
 
Le mode de codage que tu décris est de type "à virgule fixe" , le nombre de "binales" (? ~= "décimales) est fourni, en général, dans les formats de lecture ou d'écriture, voir les déclarations de zones (du Cobol).

Comment décomposer 5,37 :
...
contient : _______4 (2 puiss 2) : oui ---> 1
contient : _______ 2 (2 puiss 1) : non ---> 0
contient : _______1 (2 puiss 0) : oui ---> 1
contient : _____0.5 (2 puiss -1) : non---> 0
contient : ____0.25 (2 puiss -2) : oui ---> 1
contient : ___0.125 (2 puiss -3) : non---> 0

résultat : 101.010

Comme en décimal, il y a des problèmes de troncatures et d'arrondi. De même nature que la division par 3 (....,3333...).
Dans ton exemple, la valeur la plus proche serait : 101.011 (à régler par hard ou soft). Le problème se pose effectivement dans les opérations faisant intervenir des grands nombres avec de très petits (comme la différence de 2 produits : a1*x1 - a2*x2, opérations fréquentes dans le calcul matriciel). C'est même une spécialité que de mettre en place des méthodes de calcul de ce type.
0