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 :

isnan() et isinf()


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 80
    Par défaut isnan() et isinf()
    J'utilise ces 2 fonctions de la bibliothèque <cmath>.

    Mon compilateur sous linux les accepte sans problème. Par contre, quand je pense sous Windows, le compilateur de M$ ne les trouve pas.

    J'ai trouvé l'équivalent pour isnan => _isnan mais pas pour isinf().

    Quelqu'un la connait ?

    Merci

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    _isnan n'est pas portable, c'est juste du Visual C++ (et peut-être autre aussi). Tu peux faire un code portable avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    inline bool is_nan(double x) {
        // quand x == NAN, alors l'expression x == x vaut toujours false et x != x toujours true
        return x != x;
    }
    inline bool is_inf(double x) {
        // x == INF si x == +infini || x == -infini, c-a-d si |x| == +infini (HUGE_VAL)
        return std::fabs(x) == HUGE_VAL;
    }

  3. #3
    Membre confirmé
    Inscrit en
    Février 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 80
    Par défaut
    Merci pour ta réponse.

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Merci !

    Enfin, j'ai un warning !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    attention : comparer des nombres flottants à l'aide de == ou != n'est pas sûr [-Wfloat-equal]|
    J'ai du modifier mes options pour ne plus avoir ce warning.
    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...

  5. #5
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonjour

    Il est préférable d'utiliser std::numeric_limits en C++ maintenant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    template<class T>
    inline bool is_signaling_NaN(double x) {
        return std::numeric_limits<T>::has_signaling_NaN() && value == std::numeric_limits<T>::signaling_NaN();
    }
     
    template<class T>
    inline bool is_infinity(double x) {
        return std::numeric_limits<T>::has_infinity() && value == std::numeric_limits<T>::infinity();
    }
    En C++11 : std::isnan et std::isinf

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Et en C tout simplement ? En fait, je fais du C.
    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...

  7. #7
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template<class T>
    inline bool is_signaling_NaN(double x) {
        return std::numeric_limits<T>::has_signaling_NaN() && value == std::numeric_limits<T>::signaling_NaN();
    }
    Tu es sûr de toi ? Parce que NAN a généralement la propriété de n'être égal à rien, même pas à lui-même...
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

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

Discussions similaires

  1. Contrôle valeur numérique isNaN
    Par Kimado dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 14/05/2008, 13h33
  2. fonction isInt comme isNaN?
    Par bruman dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/04/2008, 16h08
  3. Inverse de la fonction isnan
    Par Ptinéwik dans le forum MATLAB
    Réponses: 4
    Dernier message: 18/12/2007, 09h55
  4. isfinite isnan en visual c++ <math.h>
    Par kakrocq dans le forum Visual C++
    Réponses: 2
    Dernier message: 19/03/2007, 17h59
  5. fonction IsNaN en asp
    Par jefferson dans le forum ASP
    Réponses: 2
    Dernier message: 31/12/2004, 00h08

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