VIRGULE FIXE

Fermé
karemkadidola Messages postés 9 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 21 février 2012 - 11 oct. 2009 à 09:32
 karemkadidola - 11 oct. 2009 à 23:51
Bonjour,
une question qui me casse la tête, on dit dans la représentation à virgule fixe. la virgule est gérée par le programme et non la machine qui ne connait pas de virgule, alors pour les férus des "1" et de "0" qui savent dites moi comment fait la machine pour coder sur 16 bits 2,25 qui donnent bien 0000 0000 0010,0100 ceci puisqu'on a tenu compte de la virgule (cfr changement de base de la partie fractionnaire) alors que si comme on le dit la machine ignore la virgule on aurait eu 0000 0000 1110 0001 (pour 225) et si on décide de placer la virgule après deux chiffres ça serait tout simplement 0000 0011 1000, 0100 j'attends vos réponses merci.
étudiant 1ere informatique les reponses de mes prof étaient vagues et pas convaincante.

3 réponses

Non effectivement, la virgule, en tant que caractère, ne fait pas partie du 'nombre'.
Alors comment fait-on ?
Simplement en écrivant le nombre sous la forme: M E
- M représente la Mantisse (comprise par convention entre 1 et 2 (nous sommes en binaire!)),
- E représente l'Exposant.
Un détail, la taille de la mantisse et de l'exposant sont bien sûr déterminés à l'avance. Par exemple dans ton exemple sur 16 bits, on pourrait avoir 10 bits pour la mantisse et 6 bits pour l'exposant.
Pour représenter 25,25, on écrirait:
25,25 (base 10) = 11001,01 (base 2)
- M = 1,100101
- E = 100 (soit 4 en base 10)
Ce qui nous donnerait le nombre 25,25 en base 2:
1001010000000100 (on oublie le premier '1' de la mantisse car, par convention, il existe toujours. J'ai simplifié car je n'ai pas parlé de nombres négatifs, mais le principe reste le même.
Pour de plus amples informations, fais une recherche sur la toile, par exemple ici.
Bonne continuation.
1
karemkadidola
11 oct. 2009 à 17:46
Merci pour ta réponse, je l'ai lu je ne vois plus alors la difference entre representation en virgule flottante et virgule fixe.
merci
0
loupius > karemkadidola
11 oct. 2009 à 18:36
Exact la réponse donnée était pour la virgule flottante.
Voyons maintenant la virgule fixe.
Un exemple en base 10:
- soient 3 nombres: 252525,123456 / 2525,1234 / 25,12
Si on les écrit en vigule fixe avec 3 chiffres après la virgule, on écrira alors:
252525,123 / 2525,123 / 25,120
Si on s'est mis d'accord on pourra les écrire: 252525123 / 2525123 / 25120, la virgule devenant inutile puisque l'on sait que les 3 chiffres de droite sont après la virgule.

En base 2, c'est exactement la même chose; il suffit de se mettre d'accord sur le nombre de chiffres après la virgule. Si on reprend l'exemple avec : 25,25 (base 10) = 11001,01 (base 2). Si on dit que le nombre est 16 bits avec:
- 4 bits après la virgule, on pourra écrire: 0000000110010100
- 6 bits après la virgule, on pourra écrire: 0000011001010000
- 8 bits après la virgule, on pourra écrire: 0001100101000000
Tout est une question de convention.
Ai-je été assez clair ?
0
karemkadidola
11 oct. 2009 à 23:49
merci pour t'être penché sur mon cas en tout cas, je retiens que c'est juste une question de convention...et merci pour la rapidité de la réponse j'apprecie
bonne soirée à toi
1
karemkadidola
11 oct. 2009 à 23:10
c encore cher loupius, justement c là qu'est le problème si la machine ignore la virgule pour 2525 avec deux chiffres avant la virgule il va coder ceci 110010000011001 binaire pur pour 2525 en admettant qu'on replace la virgule après grace à la programmation on aura 1100100000110,01 qui vous êtes d'accord avec moi n'a rien à voir avec 11001,01 justement si on a eu 11001,01 c'est puisque on a converti la parti après la virgule autrement en faisant justement ce que l'on sait 0,25 x 2 = 0,50 on retiens 0 puis 0,50 x 2 on obtient 1 et on s'arrete là qui nous donne xx,01 pour la partie decimale ma question en super bref c'est comment coder cette partie après la virgule AUTREMENT si on ne sait pas que cette partie se trouve après la virgule puisqu'on ignore la virgule je ne sais pas si j'arrive à bien formuler ma question...et c là que ça coince pour moi
merci encore de ton attention à mon souci
bonne soirée
0
Ok, je n'ai pas été assez clair.
Tout est une question de convention;
On ne met pas de virgule car on ne peut pas la mettre. L'entier codé en mémoire n'est pas de type chaîne de caractères. Il n'y a aucune possibilité de mettre une virgule ( il n'y a pas de bit qui permette de l'identifier). Il n'y a donc que la convention qui permet de savoir où se trouve la virgule.
C'est la convention qui permet de résoudre le problème.
Bonne continuation.
0
karemkadidola > loupius
11 oct. 2009 à 23:51
en tout cas merci pour t'être penché sur mon cas en tout cas, je retiens que c'est juste une question de convention...et merci pour la rapidité de la réponse j'apprecie
bonne soirée à toi
0