Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3300 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  Virgule flottante (Gleitkommazahl)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Virgule flottante (Gleitkommazahl)

n°1651834
Reddie
Posté le 02-12-2007 à 16:43:58  profilanswer
 

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.

mood
Publicité
Posté le 02-12-2007 à 16:43:58  profilanswer
 

n°1651838
Reddie
Posté le 02-12-2007 à 17:04:02  profilanswer
 

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

n°1651841
Sire Jeans
Jardin du son
Posté le 02-12-2007 à 17:06:25  profilanswer
 

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.


---------------
( ͡° ͜ʖ ͡°) ( ͡⊙ ͜ʖ ͡⊙) ( ͡◉ ͜ʖ ͡◉)
n°1651842
Reddie
Posté le 02-12-2007 à 17:11:42  profilanswer
 

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 ?

n°1651844
Sire Jeans
Jardin du son
Posté le 02-12-2007 à 17:20:36  profilanswer
 

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

---------------
( ͡° ͜ʖ ͡°) ( ͡⊙ ͜ʖ ͡⊙) ( ͡◉ ͜ʖ ͡◉)
n°1651846
Reddie
Posté le 02-12-2007 à 17:24:02  profilanswer
 

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

n°1651849
Sire Jeans
Jardin du son
Posté le 02-12-2007 à 17:36:31  profilanswer
 

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. :)


---------------
( ͡° ͜ʖ ͡°) ( ͡⊙ ͜ʖ ͡⊙) ( ͡◉ ͜ʖ ͡◉)
n°1651851
Reddie
Posté le 02-12-2007 à 17:46:26  profilanswer
 

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+

n°1651951
bjone
Insert booze to continue
Posté le 03-12-2007 à 01:03:49  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  Virgule flottante (Gleitkommazahl)

 

Sujets relatifs
Nombre avec virgule dans bddDébutant python => Affectation avec virgule [RESOLU]
[PHP] Solde avec séparateur de milliers et 2 chiffres après la virgulebloc div flottante droite qui ne prends pas toute la hauteur
replacer un point par une virguleprobleme de virgule...
Processeur à virgule flottante et à virgule fixe[VB6]importation d'une virgule dans access
image flottante: espace entre bordure et image 
Plus de sujets relatifs à : Virgule flottante (Gleitkommazahl)


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)