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 :

Norme C/C++: float et double i3e-754


Sujet :

C++

  1. #1
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2019
    Messages
    108
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 108
    Par d�faut Norme C/C++: float et double i3e-754
    Est-ce que quelques soit l'architecture de la machine h�te le format des floats et des doubles suivent ieee-754 (bit de signe, exposant, mantisse le tout en big endian)?

  2. #2
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de caf�
    Inscrit en
    Mai 2007
    Messages
    1 050
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France

    Informations professionnelles :
    Activit� : Consommateur de caf�
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 050
    Par d�faut
    Non, mais 99% du march� oui. A quelques variantes pr�ts ( pas de NaN ou INF par exemple) et des architecture exotique comme IBM ou le MIPS de la PlayStation 2....

  3. #3
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2019
    Messages
    108
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 108
    Par d�faut
    Merci

  4. #4
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    D�cembre 2015
    Messages
    1 599
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement mat�riel �lectronique
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : D�cembre 2015
    Messages : 1 599
    Par d�faut
    Bonjour,

    A part sur des processeurs pour l'embarqu� o� on peut avoir des formats particuliers (p.e des doubles sur 4 octets), j'ai toujours vu un format IEEE-754 mais pas toujours en big-endian. Le but est souvent d'avoir le bit de signe � la m�me position que les entiers et donc des float/double en little-endian.

  5. #5
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2019
    Messages
    108
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 108
    Par d�faut
    Citation Envoy� par dalfab Voir le message
    Bonjour,

    A part sur des processeurs pour l'embarqu� o� on peut avoir des formats particuliers (p.e des doubles sur 4 octets), j'ai toujours vu un format IEEE-754 mais pas toujours en big-endian. Le but est souvent d'avoir le bit de signe � la m�me position que les entiers et donc des float/double en little-endian.
    Si je comprends bien dans la norme IEEE-754 la mantisse n'est pas forc�ment en big endian?

  6. #6
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    D�cembre 2015
    Messages
    1 599
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement mat�riel �lectronique
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : D�cembre 2015
    Messages : 1 599
    Par d�faut
    Le s�quence est toujours : signe + exposant biais� + mantisse
    Donc le bit de poids faible du double est le bit de poids faible de la mantisse. Ce bit est dans le premier octet en little-endian et dans le dernier en big-endian. C'est normalement transparent � l'utilisateur. Ce code marche toujours (du moins en C, en C++ c'est � �viter):
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    union {
        double    db;
        int64_t   in;
        unsigned char tab[8];
    };
    db = 3.1416;
    uint64_t mantisse = in & 0x001FFFFFFFFFFFFFL; // marche toujours, ne dépend pas de l'endianess
    assert( (in < 0) == (db < 0) );         // marche toujours (sauf nombre spéciaux : NaN ou -0)
    assert( tab[0] == (mantisse & 0xFF) );  // vrai seulement en little-endian
    assert( tab[7] == (mantisse & 0xFF) );  // vrai seulement en big-endian
    Tant qu'on ne s'int�resse pas au d�tail des octets, et on a aucune raison de le faire, l'endianess est invisible du code.

  7. #7
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    D�cembre 2019
    Messages
    683
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 95
    Localisation : Autre

    Informations professionnelles :
    Activit� : ..

    Informations forums :
    Inscription : D�cembre 2019
    Messages : 683
    Par d�faut
    Salut,

    Citation Envoy� par baragouine Voir le message
    Est-ce que quelques soit l'architecture de la machine h�te le format des floats et des doubles suivent ieee-754 (bit de signe, exposant, mantisse le tout en big endian)?
    Non, il n'y a aucune obligation de ce c�t� l�. La repr�sentation des flottants, boutisme compris, est d�finie par l'impl�mentation. Et �a va m�me plus loin, le compilateur peut utiliser une impl�mentation compl�tement diff�rente de celle qui sera utilis�e � l'ex�cution, jusqu'� m�me produire des r�sultats tr�s diff�rents pour une m�me op�ration, suivant que celle-ci est calcul�e pendant la compilation ou � l'ex�cution. Quoiqu'il en soit, C et C++ exposent un certain nombre de macros, constantes ou fonctions qui permettent de savoir si iec(60)559 (nom du standard correspondant � la norme ieee754) est pris en charge, dans quelle mesure et le cas �ch�ant d'affiner sont comportement.

  8. #8
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2019
    Messages
    108
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 108
    Par d�faut
    �a me donne envie de pleurer, c'est si dur de se mettre d'accord?

  9. #9
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    D�cembre 2015
    Messages
    1 599
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement mat�riel �lectronique
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : D�cembre 2015
    Messages : 1 599
    Par d�faut
    Citation Envoy� par baragouine Voir le message
    �a me donne envie de pleurer, c'est si dur de se mettre d'accord?
    Ce que l'on dit c'est que �a n'est pas garanti, comme l'a pr�cis� kaitlin tu as des macros pour v�rifier si c'est le cas. C'est souvent le cas mais pas toujours, le format effectif est li� au format des donn�es du coprocesseur flottant, le langage n'y est pour rien. C'est pour cela que la norme ne peut pas imposer un format.
    La constante std::numeric_limits<double>::is_iec559 indique si le double est bien "ISO/IEC/IEEE 60559:2011 is the same as IEEE 754-2008."

  10. #10
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    D�cembre 2019
    Messages
    683
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 95
    Localisation : Autre

    Informations professionnelles :
    Activit� : ..

    Informations forums :
    Inscription : D�cembre 2019
    Messages : 683
    Par d�faut
    Aussi il n'y a pas toujours de coprocesseur flottant. Et combien m�me il existerait, rien oblige l'impl�mentation � l'utiliser. Et m�me si elle est en mesure de le faire, avec les options ad�quates on peut lui demander de ne pas le faire.

    Les standards C et C++ d�finissent ceux que sont les flottants et ce qu'il faut en attendre, pas comment (obligatoirement) y parvenir. Donc quelque part ce degr� de libert� est un axe d'innovation. Et c'est d'autant plus remarquable si on regarde du c�t� de la lib standard, car c'est ce m�me degr� de libert� qui permet � la lib standard d'exister sous forme de diff�rentes impl�mentations et d'aboutir donc � l'�cosyst�me riche que l'on conna�t.

Discussions similaires

  1. float ou double, mauvais format?
    Par didier17062006 dans le forum C++Builder
    R�ponses: 6
    Dernier message: 18/10/2006, 12h42
  2. [d�butant] Convesion Float to double
    Par cyrill.gremaud dans le forum Langage
    R�ponses: 7
    Dernier message: 12/07/2006, 09h06
  3. Probl�me conversion float vers double
    Par jhenaff dans le forum SQL Proc�dural
    R�ponses: 3
    Dernier message: 27/01/2006, 10h39
  4. Conversion d'un tableau de float en double ?
    Par alex6891 dans le forum C++
    R�ponses: 5
    Dernier message: 05/01/2006, 06h04
  5. float ou double ?
    Par Neilos dans le forum C++Builder
    R�ponses: 4
    Dernier message: 16/01/2004, 20h12

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