Virgule flottante (Gleitkommazahl)

Virgule flottante (Gleitkommazahl) - Divers - Programmation

Marsh Posté le 02-12-2007 à 16:43:58    

Salut
 
Ce sujet n'entre pas vraiment dans une des catégories présentes mais concerne la programmation en général.
Je voudrais savoir comment je peux convertir un nombre binaire contenant 16bits (à virgule flottante) en un nombre décimal à virgule.
 
J'ai le nombre binaire suivant : 0100 0111 1110 0001 donc 16 Bits.
Je sais que dans ce nombre 1 Bit est dédié au signe du nombre décimal (0 positif, 1 négatif), puis 6 Bits à l'Exponent et 9 Bits à la Mantisse (significant).
 
Mais après, comment je fais pour transformer tout ca en un nombre décimal à virgule ?
 
Voila, merci pour votre aide.

Reply

Marsh Posté le 02-12-2007 à 16:43:58   

Reply

Marsh Posté le 02-12-2007 à 17:04:02    

Je pense avoir trouvé une réponse, pouvez-vous me dire si ça convient :
 
Mon signe est ici 0 donc positif.
Mon Exponent correspond à 100 011 soit 35 (décimal).
Ma Mantisse correspond à    1 1110 0001 soit 481 (décimal).
 
La formule qui me donne mon nombre est apparemment :  
 
Z= (-1)^0 * (1.0+m/2^9)*2^(35-31) car e=35
Z=31.03125
Est-ce Juste ?
 
Sinon, comment additioner 2 nombres à virgule flottante contenant 16bits.
 
Comment additioner par exemple :  
0100 0111 1110 0001 + 0100 0010 0110 0001  
 
Dois-je convertir ces deux nombres en nombre décimal à virgule puis les additioner donc :
 
Somme = 31.03125 + 4.7578125 = 35.7890625 puis convertir ce nombre obtenu en nombre binaire à virgule flottante ?
 
Merci

Reply

Marsh Posté le 02-12-2007 à 17:06:25    

Ca sent le devoir à rendre pour Lundi ça :o
 
Pour que ce soit plus clair il faut que tu transformes 0100 0111 1110 0001 en -12345.6789. C'est peut être plus clair ? Parce qu'après, le reste va de sois sauf peut être pour le placement de la virgule qui peut être tricky.


---------------
( ͡° ͜ʖ ͡°) ( ͡⊙ ͜ʖ ͡⊙) ( ͡◉ ͜ʖ ͡◉)
Reply

Marsh Posté le 02-12-2007 à 17:11:42    

Sire Jeans a écrit :

Ca sent le devoir à rendre pour Lundi ça :o
 
Pour que ce soit plus clair il faut que tu transformes 0100 0111 1110 0001 en -12345.6789. C'est peut être plus clair ? Parce qu'après, le reste va de sois sauf peut être pour le placement de la virgule qui peut être tricky.


 
Non justement même pas  :D . C'est vrai que on peut se demander qui irait se faire chier à faire ça un Dimanche soir  :sweat:. Sérieusement, j'ai envie de comprendre ce truc.
 
J'ai pas compris ce que tu voulais dire par transformer 0100 0111 1110 0001 en -12345.6789. Sinon peut-être que t'as pas vu mon dernier message ?

Reply

Marsh Posté le 02-12-2007 à 17:20:36    

Reddie a écrit :


 
Non justement même pas  :D . C'est vrai que on peut se demander qui irait se faire chier à faire ça un Dimanche soir  :sweat:. Sérieusement, j'ai envie de comprendre ce truc.
 
J'ai pas compris ce que tu voulais dire par transformer 0100 0111 1110 0001 en -12345.6789. Sinon peut-être que t'as pas vu mon dernier message ?


 
C'est ça, je me suis fait grillé mais je fais comme si rien ne s'était passé  :D
 
J'admet que je n'ai pas calculé mais la formule que tu donnes dans ton deuxième message est plutôt etrange à mon avis. Si ce n'est pas un devoir où as-tu eu cette formule ? Car la norme IEEE-754 compte en 32 et 64 bits.


Message édité par Sire Jeans le 02-12-2007 à 17:20:48

---------------
( ͡° ͜ʖ ͡°) ( ͡⊙ ͜ʖ ͡⊙) ( ͡◉ ͜ʖ ͡◉)
Reply

Marsh Posté le 02-12-2007 à 17:24:02    

Ouais, c'est bien ce qu'il me semblait que ce serait pas aussi simple...:/
Cette formule, elle vient de Wikipedia, mais est en effet utilisée pour 32 ou 64 Bits. Ca doit pas aller alors.
 
Je fais comment, en fin de compte^^?
Merci

Reply

Marsh Posté le 02-12-2007 à 17:36:31    

Sur Wikipedia il est marqué ((-1)^s) * (mantisse) * (2^(exponand-127)), je ne vois pas d'où tu tire ton (1.0+m/2^9) pour le calcul de la mantisse
 
Sinon tu peux trouver un cours qui rentre très en détail dans l'arithmétique à virgule à cette page : http://hal.inria.fr/inria-00071477. Il y a même du pseudo-code pour comprendre comment implémenter le système. :)


---------------
( ͡° ͜ʖ ͡°) ( ͡⊙ ͜ʖ ͡⊙) ( ͡◉ ͜ʖ ͡◉)
Reply

Marsh Posté le 02-12-2007 à 17:46:26    

Sire Jeans a écrit :

Sur Wikipedia il est marqué ((-1)^s) * (mantisse) * (2^(exponand-127)), je ne vois pas d'où tu tire ton (1.0+m/2^9) pour le calcul de la mantisse
 
Sinon tu peux trouver un cours qui rentre très en détail dans l'arithmétique à virgule à cette page : http://hal.inria.fr/inria-00071477. Il y a même du pseudo-code pour comprendre comment implémenter le système. :)


Ok merci, mais la formule que tu donnes c'est pour du 32 Bits.
A+

Reply

Marsh Posté le 03-12-2007 à 01:03:49    

les additions et sous-tractions sont faites en ramenant les valeurs à l'exposant le plus grand.
attention au 1 implicite.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed