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

Bibliothèques Discussion :

générer un float nan .


Sujet :

Bibliothèques

  1. #1
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut générer un float nan .
    Bonjour

    Voici comment je généré un float Not A Number :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     unsigned long l_nan=0xffffffff; /* représentation binaire d'un NaN */
        float fnan,sortie;
     
        fnan =*((float*)&l_nan); /* astuce pour créer un float NaN */
    Depuis le début, le compilateur, me génère un warning à ce niveau. Voici le message qu'il me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /home/troumad/Documents/perso/lire_odc.c|176|attention : déréférencement du pointeur type-punned brisera les strictes d'alias [-Wstrict-aliasing]|
    Je me dis qu'il devrait bien exister une méthode pour compiler ceci sans warning : je n'en veux pas dans mon programme !
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  2. #2
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Il faut utiliser les facilités prévues par le langage pour construire des NaN ou les discerner.

    Ton morceau de code est source de comportement indéterminé pour au moins deux raisons :

    • les représentations NaN sont multiples et dépendantes de l'architecture ;
    • tu ne dois jamais transtyper directement un type flottant vers un type entier ou vice-versa, mais copier explicitement les données au niveau de l'octet (tu peux jeter un œil à l'exemple de cppreference).



    Citation Envoyé par troumad Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /home/troumad/Documents/perso/lire_odc.c|176|attention : déréférencement du pointeur type-punned brisera les strictes d'alias [-Wstrict-aliasing]|
    Cette traduction..

  3. #3
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    Merci.

    On dirait que ça marche. Mais, c'est quoi ces différents nan ?

    nb : au niveau de la traduction, je suis au même niveau d'anglais
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  4. #4
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 564
    Points : 7 640
    Points
    7 640
    Par défaut
    Il y a deux NaN

    Le quiet NaN ou qNaN. Les qNaN peuvent être utilisé dans des calculs de flottant avec un résultat qui vaut souvent qNaN (p.e. NaN + 1 ==> qNaN, if ( NaN==NaN) => faux! car un NaN est différent de tout y compris de lui-même!). qNaN permet d'enchainer les calcul et de vérifier ensuite s'il y a eu erreur.

    Le signaling NaN ou sNaN. C'est aussi un NaN mais si on tente de s'en servir dans des calculs, il y aura aussi un résultat quiet NaN mais en plus une erreur sera signalée (de plusieurs manière possibles). Le sNaN est là pour arrêter au plus vite les calculs, s'il y a erreur.

    En réalité on voit peu la différence. Elle n'est flagrante que si les exceptions sont activées pour les flottants, ce qui est rarement le cas.

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

Discussions similaires

  1. Générer une liste
    Par pfredin dans le forum Langage SQL
    Réponses: 6
    Dernier message: 02/04/2003, 15h30
  2. Réponses: 2
    Dernier message: 31/08/2002, 14h00
  3. Générer un nombre aléatoire entre 0 et 1 (INCLUS !!!)
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 22/08/2002, 16h30
  4. [CR][VB] comment générer un état ?
    Par ndi dans le forum SDK
    Réponses: 3
    Dernier message: 22/08/2002, 13h13
  5. Réponses: 5
    Dernier message: 08/07/2002, 16h22

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