nombre a virgule en binaire (VHDL)

Electronique numérique / Circuits logiques programmables EPLD, CPLD, FPGA d'Altera ou de Xilinx VHDL, Verilog ou SystemC

Modérateur : Modérateur

jojo

nombre a virgule

Message par jojo »

Salut a tous

comment coder 1.3 en binaire sur 6 bits?

merci de l'aide

Avatar de l’utilisateur
marsu
INSATIABLE
INSATIABLE
Messages : 155
Inscription : 13 juin 2005 10:08
Localisation : Paris
Contact :

Message par marsu »

Crées ta propre règle avec mantisse et exposant...

Tortue
NOUVEAU
NOUVEAU
Messages : 11
Inscription : 16 mars 2007 3:09

Message par Tortue »


C'est plus simple mais il a des contraintes comme le fait que ça ne soit pas adapté à la multiplication.
Bonjour à tous

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
:-D
Merci beaucoup pour votre aide!

lamygale
REGULIER
REGULIER
Messages : 115
Inscription : 11 juin 2005 19:27
Localisation : Bordeaux - ENSEIRB - EirBot
Contact :

Message par lamygale »

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 :
Je fais : 1100 * 0011 = 100100 dans un premier temps
la tu as du Q0 donc tu multiplie decale a gauche de 5 bits.
ensuite je fais 10001 * 1100 = 110,01100
Q5 donc ok
Ensuite je fais 0011 * 10010 = 01,10110
idem
Il ne me reste plus qu'à faire 10001*10010 = 100110010
ici c'est du Q10 donc decale a droite de 5 bits.
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 ;-)

Tortue
NOUVEAU
NOUVEAU
Messages : 11
Inscription : 16 mars 2007 3:09

Message par Tortue »

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.

lamygale
REGULIER
REGULIER
Messages : 115
Inscription : 11 juin 2005 19:27
Localisation : Bordeaux - ENSEIRB - EirBot
Contact :

Message par lamygale »

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
La vie est une maladie mortelle sexuellement transmissible ;-)

wqa

Message par wqa »

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...?

Répondre