IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 32-bits / 64-bits Assembleur Discussion :

Représentation de nombres flottants


Sujet :

x86 32-bits / 64-bits Assembleur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 29
    Par défaut Représentation de nombres flottants
    Bonjour à tous,
    Je dois actuellement effectuer un petit programme tout simple en assembleur (cible Pentium 2) pour effectuer une multiplication sur un nombre flottant.

    Afin de vérifier la représentation des nombres flottants sur celui-ci, j'ai d'abord effectué un bête programme C auquel j'ai défini une variable de type flottant.
    J'affecte une valeur à cette variable et vais ensuite voir la façon dont elle est stockée en mémoire.

    J'obtiens les résultats suivants:
    float_var = 2.8 --> 0x40333333
    float_var = 1.4 --> 0x3FB33333
    float_var = 1.75 --> 0x3FE00000

    J'ai regardé la norme IEEE 754 mais je ne comprends pas du tout la représentation obtenue.
    Quelqu'un peut-il me dire s'il voit quelle est la représentation utilisée par mon compilateur C?

  2. #2
    Membre émérite Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Par défaut
    C'est bien IEEE 754.
    A mon avis la page sur wikipedia est très clair tu pourrais y jeter un oeil !

    Convertion de ton premier exemple 2.8 à la main :

    1. Le nombre est positif le bit de signe seras donc 0.
    2. Convertion en notation binaire 2.8 = 10.1100110011001100110011
      .1100110011001100110011 parceque c'est la somme de :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      2^-1	*1	0,5
      2^-2	*1	0,250
      2^-3	*0	0,125
      2^-4	*0	0,0625
      2^-5	*1	0,03125
      2^-6	*1	0,015625
      2^-7	*0	0,0078125
      2^-8	*0	0,0039062
      2^-9	*1	0,001953125
      2^-10	*1	0,000976563
      2^-11	*0	0,000488281
      2^-12	*0	0,000244141
      2^-13	*1	0,00012207	
      2^-14	*1	0,000061035
      2^-15	*0	0,000030518
      2^-16	*0	0,000015259
      2^-17	*1	0,00000763
      2^-18	*1	0,000003815
      2^-19	*0	0,000001907
      2^-20	*0	0,000000954
      2^-21	*1	0,000000477
      2^-22	*1	0,000000238
      = 0,799999953
    3. Normalisation du nombre binaire obtenu
      10.1100110011001100110011 devient 1.01100110011001100110011 * 2^1
      la fraction est donc : 01100110011001100110011
    4. L'exposant est 1, il doit être biaisé en ajoutant 127 ce qui donne 128 = 10000000
    5. En rassemblant le tout on obtient :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
             S EXPONENT FRACTION	
      2.80 : 0 10000000 01100110011001100110011

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 193
    Par défaut
    Très bonne explication ,par contre le lien vers wikipedia peut mieux faire.La page existe en français.
    http://fr.wikipedia.org/wiki/IEEE_754

  4. #4
    Membre averti
    Inscrit en
    Juillet 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 29
    Par défaut
    Merci pour vos réponses.
    J'avais effectivement lu la page wikipedia mais je n'avais pas compris que l'on utilisait des puissances négatives de 2 pour ce qui est après la virgule.

    En gros je convertissais d'abord la partie décimale, puis la partie fractionnelle et complétait avec des 0 pour obtenir les 32 bits. (le système mantisse, signe et exposant je l'avais compris en revanche, c'est déjà ça).

    Je comprends donc mieux les résultats obtenus.

  5. #5
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 61
    Par défaut
    J'ai compris les calculs et sait maintenant faire la conversion, mais même en lisant l'article sur Wikipedia, je ne comprends pas pourquoi il doit y avoir un décalage de 128.

    Pouvez vous m'expliquer ?

  6. #6
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 61
    Par défaut
    En fait la réponse se trouve dans cette phrase

    "L'exposant est décalé de 2^(e-1) - 1 (e représente le nombre de bits de l'exposant). Ce décalage est utile car l'exposant peut être positif ou négatif. Cependant, la représentation habituelle des nombres signés (complément à 2) rendrait la comparaison entre les nombres flottants difficile[réf. souhaitée]. Pour régler ce problème, l'exposant est décalé, afin de le stocker sous forme d'un nombre non signé."

    Je comprend que le fait de stocker avec un décalage de 128 permet d'avoir nombres non signés soient positifs ce qui permet de les interpréter tous de la même façon quitte à effectuer un décalage ensuite.

    En effet, pour un exposant de -4 par exemple soit 11111100 codé en complément à deux. Ce dernier pourrait être aussi interprété comme 252 par le compilateur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Représentation normalisée des nombres flottants
    Par guizaniseifislam dans le forum Langage
    Réponses: 5
    Dernier message: 10/02/2012, 08h29
  2. Réponses: 2
    Dernier message: 20/10/2009, 13h10
  3. [MySQL] Probleme avec les nombres flottants
    Par Seth77 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/07/2006, 10h20
  4. nombres flottants arrondis aux 5 centimes
    Par nstubi dans le forum Langage
    Réponses: 3
    Dernier message: 17/09/2004, 09h02
  5. [Kylix] Probleme de nombre flottant!!
    Par yopziggy dans le forum EDI
    Réponses: 5
    Dernier message: 02/05/2002, 10h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo