Salut a tous
comment coder 1.3 en binaire sur 6 bits?
merci de l'aide
nombre a virgule en binaire (VHDL)
Modérateur : Modérateur
Crées ta propre règle avec mantisse et exposant...
Marsu
Groupe d'humour... http://groups.google.com/group/forire-le-retour
Inscription gratuite ici : http://groups.google.com/group/forire-l ... xsubscribe
Groupe d'humour... http://groups.google.com/group/forire-le-retour
Inscription gratuite ici : http://groups.google.com/group/forire-l ... xsubscribe
Bonjour à tous
C'est plus simple mais il a des contraintes comme le fait que ça ne soit pas adapté à la multiplication.
Je me posais une question quand à l'utilisation de mots binaire à virgule fixe avec la multiplication. Prenons un exemple je souhaite multiplier 12.57 par 3.56
je code ces deux chiffres de cette manière :
12.57 = 1100,10010
3.56 = 0011,10001
Je fais : 1100 * 0011 = 100100 dans un premier temps
ensuite je fais 10001 * 1100 = 110,01100
J'ajoute 110 à 100100 et j'obtiens 101010
Je conserve 01100
Ensuite je fais 0011 * 10010 = 01,10110
J'ajoute 01 à 101010 et j'obtiens 101011
Je conserve 10110
Il ne me reste plus qu'à faire 10001*10010 = 100110010
Si je l'ajoute aux autres chiffres conservés (soulignés) j'obtiens 1010,10100
Addition finale : 1010 + 101011 = 110101
soit un résultat final de 110101,10100 = 53,625
Donc c'est faux car 12.57 * 3.56 = 44.7492
Où est ce que je me plante??? J'espère que vous arriverez à décripter mon charabia

Merci beaucoup pour votre aide!
-
- REGULIER
- Messages : 115
- Inscription : 11 juin 2005 20:27
- Localisation : Bordeaux - ENSEIRB - EirBot
A vue de nez, je dirais que tu as gagné environ 10 en oubliant de diviser par 32 la multiplication des parties a virgule.
En effet elles ont égales à X=x/32 et Y=y/32 ( ou x et y sont des entiers)
donc X*Y=x*y / 1024 .
Ce format s'appele le Qk, et si on utilise le Q5 (5 bits apres la virgule comme pour ton exemple), si on multiplie A par B avec A et B en Q5,
C = A*B
Comme A et B sont de en Q5, cad que chacun est multipliés par 32 pour conserver une partie décimale, C est multiplié lui par 32*32 cad 1024.
Donc pour conserver le format Q5, on divise le résultat par 32.
Ainsi si on veut que A, B et C soient du Q5, on ecrit :
C = (A*B) >>5
Je pense pas etre clair, donc voici ce que tu dois faire :
on a donc
10010000000+
00011001100+
00000110110+
00000001001
ce qui donne 44,34 une fois divisé par 32.
En effet elles ont égales à X=x/32 et Y=y/32 ( ou x et y sont des entiers)
donc X*Y=x*y / 1024 .
Ce format s'appele le Qk, et si on utilise le Q5 (5 bits apres la virgule comme pour ton exemple), si on multiplie A par B avec A et B en Q5,
C = A*B
Comme A et B sont de en Q5, cad que chacun est multipliés par 32 pour conserver une partie décimale, C est multiplié lui par 32*32 cad 1024.
Donc pour conserver le format Q5, on divise le résultat par 32.
Ainsi si on veut que A, B et C soient du Q5, on ecrit :
C = (A*B) >>5
Je pense pas etre clair, donc voici ce que tu dois faire :
la tu as du Q0 donc tu multiplie decale a gauche de 5 bits.Je fais : 1100 * 0011 = 100100 dans un premier temps
Q5 donc okensuite je fais 10001 * 1100 = 110,01100
idemEnsuite je fais 0011 * 10010 = 01,10110
ici c'est du Q10 donc decale a droite de 5 bits.Il ne me reste plus qu'à faire 10001*10010 = 100110010
on a donc
10010000000+
00011001100+
00000110110+
00000001001
ce qui donne 44,34 une fois divisé par 32.
La vie est une maladie mortelle sexuellement transmissible 

Ouah! merci pour cette réponse.
Par contre je remarque que l'on perd beaucoup en précision.
Y a-t-il moyen d'être plus précis sans augmenter le nombre de bits après la virgule?
De plus le nombre d'étapes de calcul pour réaliser une multiplication est impressionnant!
4 multiplications, 3 additions et un décalage. Y a-t-il une autre possibilité?
Merci.
Par contre je remarque que l'on perd beaucoup en précision.
Y a-t-il moyen d'être plus précis sans augmenter le nombre de bits après la virgule?
De plus le nombre d'étapes de calcul pour réaliser une multiplication est impressionnant!
4 multiplications, 3 additions et un décalage. Y a-t-il une autre possibilité?
Merci.
-
- REGULIER
- Messages : 115
- Inscription : 11 juin 2005 20:27
- Localisation : Bordeaux - ENSEIRB - EirBot
Comme je te l'ai dit, si tu peux multiplier 2 chiffres à n bits apres la virgule sans debordement, tu as juste à decaller à droite de n bits pour retrouver un resultat toujours avec n bits apres la virgule.
si A et B sont en Qk, et que tu veux que C le soit aussi, il suffit de faire :
C = (A*B)>>k
si A et B sont en Qk, et que tu veux que C le soit aussi, il suffit de faire :
C = (A*B)>>k
La vie est une maladie mortelle sexuellement transmissible 

Salut,
Concernant les Floating point, il y a une applet java qui m'a beaucoup servie, et qui peut aider à la compréhension, je vous laisse jeter un oeil si ca vous dit :
http://www.h-schmidt.net/FloatApplet/IEEE754.html
Mais là je cherche un programme (gratuit de préférence) qui puisse gérer une liste de floating point.
Par exemple je rentre plusieurs floating (single format) d'un coup et il me donne leur conversion d'un coup. Il me permet de les tracer. Il permet de calculer directement des opérations de floating point, etc..
Si quelqu'un connait un truc comme ca...?
Concernant les Floating point, il y a une applet java qui m'a beaucoup servie, et qui peut aider à la compréhension, je vous laisse jeter un oeil si ca vous dit :
http://www.h-schmidt.net/FloatApplet/IEEE754.html
Mais là je cherche un programme (gratuit de préférence) qui puisse gérer une liste de floating point.
Par exemple je rentre plusieurs floating (single format) d'un coup et il me donne leur conversion d'un coup. Il me permet de les tracer. Il permet de calculer directement des opérations de floating point, etc..
Si quelqu'un connait un truc comme ca...?