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

C Discussion :

Exposant dans nombres à virgules flottantes.


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2013
    Messages : 23
    Par défaut Exposant dans nombres à virgules flottantes.
    Bonjour bonjour,

    Je me pose une question et je n'ai pas su trouver la réponse sur internet.

    Pourquoi utilise-t-on un décalage pour les exposants des nombres à virgules flottantes ? Y'a une raison ? Pourquoi ne le code-t-on pas comme de vulgaires entiers (ce qu'il sont) ?

    Ha, et si quelqu'un comprend ce que ce smiley représente...

    Merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Par défaut
    Bonjour,

    L'exposant ne va que jusqu'à 37 je crois pour un réel alors qu'un entier va au moins jusqu'à 32 767, c'est peut-être l'une des raisons.
    Pour le smiley je ne sais pas !

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 473
    Par défaut
    Bonjour,

    Citation Envoyé par gautgaut Voir le message
    Je me pose une question et je n'ai pas su trouver la réponse sur internet.
    Pourquoi utilise-t-on un décalage pour les exposants des nombres à virgules flottantes ? Y'a une raison ?
    Pourquoi ne le code-t-on pas comme de vulgaires entiers (ce qu'il sont) ?
    Si par décalage, tu veux dire le « biais », on en parlait ici : http://www.developpez.net/forums/d14...nnels-binaire/

    Pour faire court, les nombres à virgule flottante sont géniaux mais le fait d'avoir un exposant permet de représenter un nombre de plusieurs façons différentes (par exemple 512⋅2⁵ = 1024⋅2⁴), ce qui réduit le domaine des nombres représentables et surtout nous empêche de comparer deux flottants bit à bit. C'est gênant. En revanche, on sait qu'un bit non nul vaut forcément 1. Le premier chiffre significatif d'un nombre binaire est donc forcément un 1, ce qui nous permet de le rendre implicite et de le sortir de la mantisse. Ça résout le problème et ça nous fait gagner un bit de précision. Parfait !

    Sauf que ce faisant, on ne peut plus coder le zéro ! Ça suffit à rendre les nombres à virgule flottante complètement inutilisables.

    Il faut donc choisir une valeur arbitraire pour réintroduire ce zéro. Accessoirement, il serait bon que ce soit 00 00 00 00, non seulement parce que c'est intuitif mais parce que ça permettrait aussi de continuer à utiliser les détecteurs de zéros câblés en dur dans les circuits logiques et arithmétiques des micro-processeurs et autres unités de traitement.

    En l'état actuel des choses, un 00 00 00 00 (tous les bits à zéro, donc) vaudrait exactement 1,000000⋅2⁰ = 1. Il est clair qu'on ne peut pas se passer du 1 non plus, et qu'en plus ça ferait un trou en plein milieu du domaine de définition des flottants.

    Introduire le biais en question permet donc de déplacer ce trou du milieu à l'extrémité basse de ce domaine. Non seulement celui-ci reste alors en un seul morceau, mais 00 00 00 00 code alors la valeur positive la plus proche de zéro représentable. Comme toutes celles qui sont en dessous sont automatiquement assimilées à zéro parce qu'elles sont en dessous de la résolution d'un float, il suffit de l'ajouter au lot et le problème est résolu dans sa totalité.

    Ha, et si quelqu'un comprend ce que ce smiley représente...Merci
    Et si on te dit que ce smiley s'appelle « ptdr », ça t'aide ? :-)

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2013
    Messages : 23
    Par défaut
    Ha ouais, c'est un mec qui se roule par terre tellement il rigole, merci !

    Merci beaucoup pour l'explication, c'est plus clair. Je ne comprenais pas en quoi ça permettait la comparaison.

    Juste un truc que je ne comprends pas :
    Citation Envoyé par Obsidian Voir le message
    Pour faire court, les nombres à virgule flottante sont géniaux mais le fait d'avoir un exposant permet de représenter un nombre de plusieurs façons différentes (par exemple 512⋅2⁵ = 1024⋅2⁴), ce qui réduit le domaine des nombres représentables et surtout nous empêche de comparer deux flottants bit à bit.
    Il me semblait que l'on utilise la notation scientifique pour savoir comment coder le nombre, et donc :
    512*25 = 1024*24 = 1*213
    Et donc, il n'y a bien qu'une seule manière de coder ce nombre, non ?

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 473
    Par défaut
    Citation Envoyé par gautgaut Voir le message
    Juste un truc que je ne comprends pas :

    Il me semblait que l'on utilise la notation scientifique pour savoir comment coder le nombre, et donc :
    512*25 = 1024*24 = 1*213
    Et donc, il n'y a bien qu'une seule manière de coder ce nombre, non ?
    Tout-à-fait. Ça sert à distinguer la valeur propre de son ordre de grandeur. Et ça veut surtout dire qu'il appartient au rédacteur de vérifier qu'elle est bien écrite et de la corriger si nécessaire, comme tu viens de le faire. Ça veut dire également qu'il y a une bonne manière d'écrire cette valeur et plusieurs mauvaises, même si l'expression reste valable.

    Comme on l'a dit plus haut, la possibilité d'avoir des synonymes au sein d'un float est préjudiciable parce que non seulement cela nous empêche de les comparer directement, mais ça réduit d'autant le nombre de valeurs représentables puisque quelle que soit la manière dont on les utilise, il n'y a toujours que 32 bits dans un float simple précision, et donc uniquement 2³² combinaisons différentes possibles (un peu plus de quatre milliards).

    En posant d'emblée « 1,[mantisse] » on établit de fait que le nombre en question privé de son exposant sera forcément compris dans l'intervalle [1;2[. Sans ce 1 implicite, il y aurait entre 1 et 23 synonymes possibles en fonction de la valeur de la mantisse, si elle est non nulle. Et le cas le plus trivial serait justement celui de la matrice nulle, qui donnerait 0,000000⋅2exposant, soit 0⋅2⁻¹²⁸ = 0⋅2⁻¹²⁷ = 0⋅2⁻¹²⁶ = 0⋅2⁻¹²⁵ = 0⋅2⁻¹²⁴ … 0⋅2⁰ … 0⋅2¹²⁵ = 0⋅2¹²⁶ = 0⋅2¹²⁷ = 0. On aurait donc 256 façons différentes de représenter le zéro, ce qui serait absurde.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Introduire un biais dans l'exposant permet aussi de comparer deux flottants comme s'il s'agissait d'entiers signés, car une fois passé le bit de signe du flottant, on tombe direct sur l'exposant, qui peut être directement comparé s'il ne peut pas être négatif.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2013
    Messages : 23
    Par défaut
    OK, merci beaucoup pour vos deux réponses, c'est clair maintenant !

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 22/05/2021, 15h33
  2. [FASM] Afficher un nombre à virgule flottante
    Par -Mod- dans le forum x86 32-bits / 64-bits
    Réponses: 5
    Dernier message: 26/08/2008, 21h10
  3. Nombres à virgule flottante
    Par visiwi dans le forum Scheme
    Réponses: 6
    Dernier message: 19/06/2008, 16h46
  4. nombre à virgule flottante
    Par new_wave dans le forum Langage
    Réponses: 1
    Dernier message: 14/01/2008, 11h16
  5. Réponses: 3
    Dernier message: 01/08/2007, 12h49

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