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++Builder Discussion :

float et IEEE


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre extr�mement actif Avatar de petitours
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    F�vrier 2003
    Messages
    2 037
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Savoie (Rh�ne Alpes)

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

    Informations forums :
    Inscription : F�vrier 2003
    Messages : 2 037
    Par d�faut float et IEEE
    Bonjour,

    Je cherche un petit logiciel capable de me donner la valeur des diff�rents octets qui constituent un float ou un double suivant la norme IEEE754.

    Etant donn� que je ne trouve pas et que c'est un peu compliqu� � faire, je me demande s'il ne serait pas tr�s facile grace � Bcb d'aller lire un � un les 4 octets d'un float dont l'espace est forc�ment r�serv� en m�moire...

    un truc du genre
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    float lenombre = 5.6 ;
     
    char octet1 = lenombre[1] ;
    char octet2 = lenombre[2] ;
    Ca vous parait possible ?
    si oui comment peut on acc�der � ces octets, ind�pendament ?
    Merci beaucoup

  2. #2
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Plusieurs mani�res.

    Avec un champ de bit et une union :

    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
    union Float
    {
        float f;
     
        struct
        {
            unsigned char Bit1 : 1,
                          Bit2 : 1,
                          ...,
                          Bit8 : 1;
        } Bits[4];
    };
     
    Float MyFloat;
    MyFloat.f = 2569.365f;
     
    int bit6 = MyFloat.Bits[0].Bit1;
    Avec les op�rateurs bits � bits :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    float f = 2569.365f;
     
    int bit6 = (*reinterpret_cast<int*>(&f) & (1 << 6)) >> 6;
    Avec les bitsets :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    #include <bitset>
     
    float f = 2569.365f;
    std::bitset<32> Bits(*reinterpret_cast<int*>(&f));
     
    int bit6 = Bits[6];
    Pas test�, mais �a devrait �tre �a.

  3. #3
    Membre extr�mement actif Avatar de petitours
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    F�vrier 2003
    Messages
    2 037
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Savoie (Rh�ne Alpes)

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

    Informations forums :
    Inscription : F�vrier 2003
    Messages : 2 037
    Par d�faut
    merci beaucoup !

    J'ai mis du temps avant de faire marcher tout ca et d'esssayer de comprendre...d�sol� de remercier si tard !

    J'arrive � faire fonctionner les deux premi�res solutions mais je ne comprends pas ce que je fais et je n'arrive donc pas � modifier quoi que ce soit ! j'arrive � retouver des choses sur les structures dans la lit�rature mais rien sur les unions et encore moins sur les "*reinterpret_cas rotudijuhklsfdffsj"

    Pour ces op�rateurs bit � bit vous mettez dans votre exemple deux fois plus de code que ce que pr�sente la synthaxe de l'aide Bcb ! je suis perdu !


    Pour la derni�re solution avec les bitsets, pas moyen de faire fonctionner !
    le compilateur me met une erreur E2021 et s'arr�te sur la ligne
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    _WordT _M_w[_Nw];                // 0 is the least significant word.
    dans bitset.h

    Ceci dit je pense que la solution structure + union est la plus interessante pour moi, je pense qu'elle peut me permettre de convertir tout ce que je veux en octets, bits � bit, hexa etc facilement.
    Je suppose que c'est un outil paratique pour manipuler les bits d'un octet, chose que je serai ammen� � faire dans le futur.

    si vous aviez des orientations � me donner au sujet des unions ce serait formidable !

    Merci mille fois pour votre aide

  4. #4
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    si vous aviez des orientations � me donner au sujet des unions ce serait formidable !
    Le principe des unions est tr�s simple : tous leurs champs partagent le m�me espace m�moire. Cons�quence, la taille d'une union n'est pas la somme de la taille de ses membres, mais leur maximum. Ainsi la donn�e de type float et les tableaux de bits partagent les m�mes bits, ce qui permet d'acc�der � ceux-ci sous la forme que tu pr�f�res (en l'occurence le float pour l'�criture, et les tableaux de bits pour la lecture).

    ...et encore moins sur les "*reinterpret_cas rotudijuhklsfdffsj"
    reinterpret_cast est l'un des 4 casts du C++ (c�d que tu aurais pu le remplacer par un bon vieux cast style C, cela aurait tout aussi bien fonctionn�). Il permet de caster deux types de pointeurs / r�f�rences n'ayant rien � voir entre eux. En gros, tu dis au compilo "je sais que ce pointeur pointe vers un float, mais j'aimerais que tu fasses comme s'il s'agissait d'un entier". C'est n�cessaire pour utiliser les op�rateurs bit � bit, car ceux-ci ne s'utilisent que sur des entiers. Voil�, j'esp�re que tu comprends un peu mieux maintenant

    Enfin, personnellement je pr�f�re la solution du bitset. std::bitset est justement fait pour manipuler des champs de bits, il ne faut pas s'en priver. Par contre �a ne fonctionnera �videmment que pour des entiers.

  5. #5
    Membre extr�mement actif Avatar de petitours
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    F�vrier 2003
    Messages
    2 037
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Savoie (Rh�ne Alpes)

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

    Informations forums :
    Inscription : F�vrier 2003
    Messages : 2 037
    Par d�faut
    re merci pour vos explications !

    Apr�s un peu de travail j'arrive � manipuler les unions et les structures d'union sans trop de mal ; Ca fait au moins ce que je veux...

    C'est un outil qui doit etre souvent pratique pour traiter des donn�es

    Merci beaucoup

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 1
    Dernier message: 01/06/2007, 10h48
  2. Interpr�tation d'un float IEEE
    Par PilouPilou dans le forum C
    R�ponses: 2
    Dernier message: 30/09/2006, 13h44
  3. Pb de formatage de champs de type float
    Par FrankyNormand dans le forum XMLRAD
    R�ponses: 9
    Dernier message: 05/05/2005, 12h37
  4. [7RC3] Formatage de champs float
    Par Sylvain Leray dans le forum XMLRAD
    R�ponses: 2
    Dernier message: 19/05/2003, 09h38
  5. probleme d'insertion d'un Float
    Par neness dans le forum D�buter
    R�ponses: 3
    Dernier message: 07/01/2003, 12h32

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