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 :

Signification code #IND


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut Signification code #IND
    Bonjour,

    J'obtient parfois la valeur #IND, et je ne trouve pas de documentation sur la signification de ce code, quelqu'un peut il me dire dans quel(s) cas une variable peut prendre cette valeur, ou du moins m'orienter vers de la documentation à ce sujet?

    Merci

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par mamatlecaribou
    J'obtient parfois la valeur #IND, et je ne trouve pas de documentation sur la signification de ce code, quelqu'un peut il me dire dans quel(s) cas une variable peut prendre cette valeur, ou du moins m'orienter vers de la documentation à ce sujet?
    C'est plutôt curieux. Tu manipules des nombres réels ? Ce ne serait pas plutôt #INF ?

    Peux tu montrer le code qui provoque ce genre de problèmes.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut
    Oui, je manipule des nombres réels. Le code est assez long, ca me semble difficile de l'afficher, c'est pour ca que je voulais savoir quel genre de phénomène pouvait provoquer ce #IND, et meme simplement ce qu'il signifie afin de cibler dans mon code ou se situe l'erreur.
    Le résultat de mon programme est une liste comme suit :

    2 0.00165021675639
    7 0.00436116838777
    11 0.00485908418362
    21 0.00107515839239
    23 0.00567643067524
    57 0.000973503040667
    106 0.000704862341872
    144 0.00157551626277
    148 -1.#IND
    152 -1.#IND
    Je n'avais jamais eu de #IND auparavant.
    Les seuls soucis de ce type que j'avais eu à gérer jusque là, c'etait des problèmes de division par zéro.

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par mamatlecaribou
    Oui, je manipule des nombres réels. Le code est assez long, ca me semble difficile de l'afficher, c'est pour ca que je voulais savoir quel genre de phénomène pouvait provoquer ce #IND, et meme simplement ce qu'il signifie afin de cibler dans mon code ou se situe l'erreur.
    Après recherche, il semblerait que ce soit une "INvalid Domain error". Je ne vois pas bien ce que ça veut dire s'agissant d'un réel. (racine d'un nombre négatif ?)

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut
    J'utilise une seule racine carrée dans mon prog :

    avec a, réel

    Existe il une liste exhaustive de l'ensemble des fonctions pouvant provoquer cette erreur?

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par mamatlecaribou
    J'utilise une seule racine carrée dans mon prog :

    avec a, réel

    Existe il une liste exhaustive de l'ensemble des fonctions pouvant provoquer cette erreur?
    Si a est < 0, ça peut expliquer le problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include <stdio.h>
    #include <math.h>
     
    int main (void)
    {
       printf ("%f\n", sqrt (-1));
       return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    -1.#IND00
     
    Press ENTER to continue.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut
    Mon erreur exacte est:

    Est ce que ca aide?

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par mamatlecaribou
    Mon erreur exacte est:

    Est ce que ca aide?
    Non Ca dépend de l'implémentation, apparemment...

    Tu as vérifié si la valeur passée à sqrt() était bien >= 0

    En mode debug, il suffit de poser un piège juste avant l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #include <assert.h>
    <...>
     
      assert(a >= 0);
      exp(-sqrt(a)) ...
    Il doit aussi y avoir un problème avec log()... C'est plus un problème de math que de C...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include <stdio.h>
    #include <math.h>
     
    int main (void)
    {
       printf ("%f\n", sqrt (0));
       printf ("%f\n", sqrt (-1));
       printf ("%f\n", log (0));
       printf ("%f\n", log (-1));
       return 0;
    }
    produit (gcc/windows : MinGW) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    0.000000
    -1.#IND00
    -1.#INF00
    -1.#IND00
     
    Press ENTER to continue.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut
    ok, je n'ai pas de log dans mon code, il semblerait que ca vienne du sqrt.
    Il est assez difficile de savoir si la valeur est positive, car c'est une fonction math que je lance un grand nombre de fois, il faut donc que je lance ce calcul en testant à chaque fois si j'ai une val negative.

    Merci en tout cas, je posterai le dénouement des mes essais.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut
    Apres verification, l'argument de sqrt, et bien toujours positif, donc pas de probleme de ce coté. Est ce que ce genre d'erreur vient-il toujours d'un probleme de definition de domaine d'une fonction mathematique? En fait suffit il de lister toutes les fonctions mathematiques du code pour trouver à coup sûr la source du probleme?
    Merci

  11. #11
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par mamatlecaribou
    Apres verification, l'argument de sqrt, et bien toujours positif, donc pas de probleme de ce coté. Est ce que ce genre d'erreur vient-il toujours d'un probleme de definition de domaine d'une fonction mathematique? En fait suffit il de lister toutes les fonctions mathematiques du code pour trouver à coup sûr la source du probleme?
    Merci
    Je ne sais pas. Ce n'est pas un problèle de langage C, mais de gcc (enfin, je suppose, quel est ton compilateur ?).

    http://www.developpez.net/forums/forumdisplay.php?f=65

  12. #12
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut
    gcc

  13. #13
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut
    Bon j'ai avancé, sur mon problème.
    Pendant mon calcul, il ya une division, et il arrive que le dénominateur soit nul, ce qui créait l'erreur. Je fais donc désormais un test pour ne pas faire cette division le cas échéant.

    Il me reste toutefois un problème : si ce dénominateur n'est pas nul, il peut arriver qu'il soit tres faible (jusqu'à E-280), et à ce moment là le réultat de la division vaut 1. J'imagine que le compilateur ne peut pas faire une division avec un dénominateur si faible, et c'est pour ca que je me retrouve avec un 1. Le dénominateur est déclaré en double.

    Question : est il possible de faire qd meme ces divisions? Si non, comment savoir à partir de quelle valeur X de l'exposant (E-X) je ne pourrais plus effectuer le calcul?

    Merci

  14. #14
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par mamatlecaribou
    Il me reste toutefois un problème : si ce dénominateur n'est pas nul, il peut arriver qu'il soit tres faible (jusqu'à E-280), et à ce moment là le réultat de la division vaut 1. J'imagine que le compilateur ne peut pas faire une division avec un dénominateur si faible, et c'est pour ca que je me retrouve avec un 1. Le dénominateur est déclaré en double.

    Question : est il possible de faire qd meme ces divisions? Si non, comment savoir à partir de quelle valeur X de l'exposant (E-X) je ne pourrais plus effectuer le calcul?
    Selon le type, FLT_EPSILON, DBL_EPSILON, LDBL_EPSILON ?

    Euh, pour l'exposant, il doit y avoir des constantes... (<float.h>...)

Discussions similaires

  1. [Débutant] [double] Signification code
    Par lecteur1001 dans le forum MATLAB
    Réponses: 5
    Dernier message: 16/07/2009, 14h33
  2. signification code en C# à porter en C
    Par crashtib dans le forum C#
    Réponses: 4
    Dernier message: 19/05/2009, 17h12
  3. Réponses: 22
    Dernier message: 03/04/2006, 19h29
  4. Signification du code
    Par krfa1 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 30/09/2005, 11h45
  5. Signification de codes ASCII dans OnKeyPress
    Par e-ric dans le forum Langage
    Réponses: 5
    Dernier message: 19/08/2005, 10h33

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