Virgule flottante et virgule fixe (calcule binaire)

Résolu/Fermé
chimou-gaga Messages postés 24 Date d'inscription samedi 10 novembre 2012 Statut Membre Dernière intervention 27 février 2015 - 28 déc. 2012 à 14:00
 slt - 1 juin 2013 à 15:44
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

4 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
28 déc. 2012 à 18:07
"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
17
chimou-gaga Messages postés 24 Date d'inscription samedi 10 novembre 2012 Statut Membre Dernière intervention 27 février 2015 3
29 déc. 2012 à 12:57
merci infiniment !
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 ?
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
29 déc. 2012 à 14:58
Forcément à droite, en fait c'est comme si tu continuais tes calculs :

0.125*2=0+0.250
0.250*2=0+0.500
0.500*2=1+0.000
0.000*2=0+0.000
0.000*2=0+0.000
0.000*2=0+0.000
0.000*2=0+0.000
...

Donc la mantisse est 00100000...
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
29 déc. 2012 à 16:13
Remarque, un pseudo-code pour le calcul d'IEEE 754 peut-être ceci :

// 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]
4
chimou-gaga Messages postés 24 Date d'inscription samedi 10 novembre 2012 Statut Membre Dernière intervention 27 février 2015 3
29 déc. 2012 à 19:47
Merci beaucoup KX ! Vous êtes le meilleur :)
0
la réponse c'est 18,125 ===> 1 1101 10010001 (2^5 x 0,100100001)
0