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 :

simuler un quiet_NaN pour un long ?


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 17
    Points : 15
    Points
    15
    Par défaut simuler un quiet_NaN pour un long ?
    Bonjour,

    je souhaiterais pouvoir utiliser quelque chose d'équivalent à un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numeric_limits<double>::quiet_NaN()
    mais sur un long.
    Je voudrais pouvoir propager ce NaN dans des calculs. Y a-t-il une solution à mon problème ?

    Merci d'avance.

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    J'ai du mal à saisir la question.

    Le long et le double n'ayant aucune garantie d'être de la même taille, je ne vois pas de solution portable.

    Si toutefois sizeof(double) == sizeof(long) sur ta plateforme, alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    double nan = numeric_limits<double>::quiet_NaN();
    long v = *(long *)(&nan);
    Stocke le double "nan" dans "v" sans en modifier sa valeur.

    Ceci dit, si tu veux un nan en long, ça n'existe pas : tous les nombres sont valides en long.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Merci de ta réponse.

    En effet ce que je cherche c'est une façon de reproduire le fonctionnement d'un NaN sur un long (et non le long et double n'ont pas la même taille). La seule solution que j'ai est d'utiliser une valeur aberrante qui se propage, mais pas comme un NaN.
    J’espérais qu'il y avait une solution plus élégante.

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par jeanpisstoute Voir le message
    Merci de ta réponse.

    En effet ce que je cherche c'est une façon de reproduire le fonctionnement d'un NaN sur un long (et non le long et double n'ont pas la même taille). La seule solution que j'ai est d'utiliser une valeur aberrante qui se propage, mais pas comme un NaN.
    J’espérais qu'il y avait une solution plus élégante.
    Il n'y en a pas, à moins que tu considère plus important d'avoi un NaN que d'avoir des calculs rapides. Dans ce cas, tu peux encapsuler le long dans un objet, redéfinir les opérateurs mathématique sur ce objet, et gérer le NaN de cette manière.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    OK merci !

    Je vais regarder par là mais je pense rester sur la valeur aberrante du coup.

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

Discussions similaires

  1. Simuler une activité pour empêcher une déconnection
    Par docjfnoel dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 28/05/2007, 10h05
  2. conversion d'un String pour un Long
    Par pinot dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 07/02/2007, 11h33
  3. Outil pour simuler des connexions pour application web
    Par lehic dans le forum Tests et Performance
    Réponses: 4
    Dernier message: 14/06/2006, 16h16
  4. Réponses: 4
    Dernier message: 12/09/2003, 11h38
  5. abs pour un long double
    Par barthelv dans le forum C
    Réponses: 2
    Dernier message: 23/07/2003, 16h16

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