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++

  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 608
    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 608
    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 608
    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 608
    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
    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
    Je pourrais pas aider en C, mais il y a eu aussi une nouvelle norme en C, à voir dedans si ces fonctions n'ont pas été ajoutées

  8. #8
    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
    cppreference donne aussi les fonctions du C -> isinf et isnan ; donc la même chose qu'en C++, mais sans le namespace

  9. #9
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 608
    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 608
    Par défaut
    Ça marche !
    Mais, pourquoi le premier message posait problème ?
    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...

  10. #10
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par troumad Voir le message
    Ça marche !
    Mais, pourquoi le premier message posait problème ?
    Peut etre parce que cmath est un fichier d'en-tête C++ et non un fichier d'en-tête C

    Entre les espaces de noms et autres joyeusetés du genre, il n'est pas vraiment indiqué d'inclure un fichier d'en-tête C++ en C, surtout de math.h existe en C
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  11. #11
    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 : 51
    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.

  12. #12
    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 : 51
    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 koala01 Voir le message
    Entre les espaces de noms et autres joyeusetés du genre, il n'est pas vraiment indiqué d'inclure un fichier d'en-tête C++ en C, surtout de math.h existe en C
    Mais comme Visual C++ ne gère en C qu'une très vieille version de la norme, il est probable que <math.h> ne contienne pas isnan.
    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.

  13. #13
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 608
    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 608
    Par défaut
    Une raison de plus pour ne pas utiliser de produits MicroSoft... Ou le moins possible...
    J'utilise code::blocks et je compile avec les bibliothèques de mingw
    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...

  14. #14
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Microsoft connaît sa clientèle, et celle-ci fait rarement du C, plutôt dédié à l'embarqué, qui est en général sur Linux.

+ 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