Virgule flottante et virgule fixe (calcule binaire)
Résolu
chimou-gaga
Messages postés
24
Date d'inscription
Statut
Membre
Dernière intervention
-
slt -
slt -
Bonjour,
je desire exprimer des nombres decimaux par le standar IEEE en simple precision.
Ce que j'ai compris par le cours :
par exp , on prends le nombre 18,125
je convertit 18 en binaire ce qui donne 10010.
puis :
0.125*2=0+0.25
0.25*2=0+0.5
0.5*2=1+0
d'ou 0.125 en binaire est 100
18.125 => 10010.100
1,00101000 * 2^4
d'ou 4 est l'exposant reel et les chiffres apres la virgules sont la mantisse
l'exposant biaisé = 127+4(l'exposant reel) = 131 que je convertit 131=> 10000011
enfin :
bit de signe'l'exposant biaisé sur 8bit'la mantisse sur 23 bit'
0'10000011'001010000000...
1-mon travaille est-il correcte ?
2- est ce que je doit ajouter l'exposant reel a 127 ou 128 ??
3-est ce que la mantisse est les chiffres apres la virgule ou tous les chiffres y compris celui avant la virgule
4- je dois laissé un chiffre avant la virgule pour chercher l'exposant reel ou mettre le nombre sous forme 0,.. ??
5- si j'ai un nombre negatif, je travaille sur son complement a 2 ou lui meme convertit en binaire ? (en changeant juste le bit de signe a la fin)
Aidez moi s'il vous plait et merci d'avance
je desire exprimer des nombres decimaux par le standar IEEE en simple precision.
Ce que j'ai compris par le cours :
par exp , on prends le nombre 18,125
je convertit 18 en binaire ce qui donne 10010.
puis :
0.125*2=0+0.25
0.25*2=0+0.5
0.5*2=1+0
d'ou 0.125 en binaire est 100
18.125 => 10010.100
1,00101000 * 2^4
d'ou 4 est l'exposant reel et les chiffres apres la virgules sont la mantisse
l'exposant biaisé = 127+4(l'exposant reel) = 131 que je convertit 131=> 10000011
enfin :
bit de signe'l'exposant biaisé sur 8bit'la mantisse sur 23 bit'
0'10000011'001010000000...
1-mon travaille est-il correcte ?
2- est ce que je doit ajouter l'exposant reel a 127 ou 128 ??
3-est ce que la mantisse est les chiffres apres la virgule ou tous les chiffres y compris celui avant la virgule
4- je dois laissé un chiffre avant la virgule pour chercher l'exposant reel ou mettre le nombre sous forme 0,.. ??
5- si j'ai un nombre negatif, je travaille sur son complement a 2 ou lui meme convertit en binaire ? (en changeant juste le bit de signe a la fin)
Aidez moi s'il vous plait et merci d'avance
A voir également:
- Division binaire avec virgule
- Binaire - Guide
- Microsoft skype division - Télécharger - Téléphonie & Visio
- Editeur binaire - Télécharger - Édition & Programmation
- Alphabet binaire - Forum Programmation
- Codage de caractère en binaire ✓ - Forum Programmation
4 réponses
"1-mon travaille est-il correcte ?"
Non, en particulier tes calculs sur les nombres à virgules.
"d'ou 0.125 en binaire est 100
18.125 => 10010.100"
Non, il faut prendre les bits dans l'autre sens, 0.125 → 001, donc 18.125 → 10010.001
"2- est ce que je doit ajouter l'exposant reel a 127 ou 128 ??"
Il est décalé de 127.
"3-est ce que la mantisse est les chiffres apres la virgule ou tous les chiffres y compris celui avant la virgule"
La mantisse c'est la succession de bits après le premier "1" qui est omis.
Dans ton exemple : 18.125=10010.001, la mantisse est 0010001.
"4- je dois laissé un chiffre avant la virgule pour chercher l'exposant reel ou mettre le nombre sous forme 0,.. ??"
Je ne comprends pas ce que tu veux dire par "exposant réel", l'exposant est un entier.
"5- si j'ai un nombre negatif, je travaille sur son complement a 2 ou lui meme convertit en binaire ? (en changeant juste le bit de signe a la fin)"
Si tu as nombre négatif, tu changes juste le bit de signe, il n'y a pas de complément à 2, ni sur la mantisse, ni sur l'exposant. Attention : le bit de signe n'est pas à la fin mais au début.
18.125 → 0 10000011 00100010000000000000000
Non, en particulier tes calculs sur les nombres à virgules.
"d'ou 0.125 en binaire est 100
18.125 => 10010.100"
Non, il faut prendre les bits dans l'autre sens, 0.125 → 001, donc 18.125 → 10010.001
"2- est ce que je doit ajouter l'exposant reel a 127 ou 128 ??"
Il est décalé de 127.
"3-est ce que la mantisse est les chiffres apres la virgule ou tous les chiffres y compris celui avant la virgule"
La mantisse c'est la succession de bits après le premier "1" qui est omis.
Dans ton exemple : 18.125=10010.001, la mantisse est 0010001.
"4- je dois laissé un chiffre avant la virgule pour chercher l'exposant reel ou mettre le nombre sous forme 0,.. ??"
Je ne comprends pas ce que tu veux dire par "exposant réel", l'exposant est un entier.
"5- si j'ai un nombre negatif, je travaille sur son complement a 2 ou lui meme convertit en binaire ? (en changeant juste le bit de signe a la fin)"
Si tu as nombre négatif, tu changes juste le bit de signe, il n'y a pas de complément à 2, ni sur la mantisse, ni sur l'exposant. Attention : le bit de signe n'est pas à la fin mais au début.
18.125 → 0 10000011 00100010000000000000000
Remarque, un pseudo-code pour le calcul d'IEEE 754 peut-être ceci :
Avec ton exemple cela donne :
// Initialisation x = valeur_a_convertir (sauf cas particuliers : 0, infini, NaN, etc.) e = 127 m = tableau de 23 bits // Calcul du signe Si x<0 x = -x s = 1 Sinon s = 0 FinSi // Calcul de l'exposant Si x<1 TantQue x<1 x = x*2 e = e-1 FinTantQue Sinon Si x>=2 TantQue x>=2 x = x/2 e = e+1 FinTantQue FinSi // Calcul de la mantisse x = x-1 Pour i allant de 1 à 23 m = m*2 Si x<1 m[i] = 0 Sinon m[i] = 1 x = x-1 FinSi FinPour
Avec ton exemple cela donne :
// initialisation x = 18.125 e = 127 m = [] // Calcul du signe x > 0 donc s = 0 // Calcul de l'exposant x >= 2 donc e = 128 et x = 9.0625 x >= 2 donc e = 129 et x = 4.53125 x >= 2 donc e = 130 et x = 2.265625 x >= 2 donc e = 131 et x = 1.1328125 // Calcul de la mantisse x = 0.1328125 i=1 et x = 0.265625 donc m=[0] i=2 et x = 0.53125 donc m=[00] i=3 et x = 1.0625 donc m=[001] et x=0.0625 i=4 et x = 0.125 donc m=[0010] i=5 et x = 0.25 donc m=[00100] i=6 et x = 0.5 donc m=[001000] i=7 et x = 1 donc m=[0010001] et x=0 i=8 et x = 0 donc m=[00100010] ... i=23 et x = 0 donc m=[00100010000000000000000]
Dans mon cours , on appelle "exposant reel" le nombre qu'on ajoute a 127.
en tout cas, vous m'avez bien clarifier tous.
une dernière question. si j'obtiens la mantisse en moins de 8 chiffres, j'ajoute des zéros a droite ou a gauche ?
Donc la mantisse est 00100000...