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 :

Erreur de calcul avec la fonction log


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut Erreur de calcul avec la fonction log
    bonjour,

    voila j'y perd mon latin, j'effectue des calculs, généralement tout ce passe bien mais sur certaines valeurs, j'obtiens des valeurs NaN sans raison;

    lorsque je fais:
    double x = (wPos[i]+epsilon)/(wNeg[i]+epsilon);
    cerr<<"x "<<x<<endl;
    j'obtiens: x 0.0138675
    mais lorsque je fais:
    double val = log(x);
    cerr<<val<<endl;
    j'obtiens : nan.
    Mais si je fais: cerr<<log(double((wPos[i]+epsilon)/(wNeg[i]+epsilon)))<<endl;
    j'obtiens :
    -4.27821

    Bon voila je m'arrache les cheveux, si quelqu'un peut m'aider.
    Merci

  2. #2
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    t'es sur que tu fais pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cer << log( val ) << endl;
    à la place de :
    Moi je ne reproduis pas.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut
    Non, c'est bien ce que je fais; j'ai copié le code. En fait, pour quasiment toutes les valeurs je n'ai pas de problème et pour cette valeur particulière j'ai cette erreur, j'ai l'impression que c'est peut-être un bug de la fonction log sous mac, je code xcode sous leopard.

  4. #4
    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
    Tu pourrais nous donner un programme complet qui reproduise ça ? Avec entre autre les valeurs exactes des wPos, wNeg et epsilon ?
    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.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut
    En fait, je pense pas que ce soit une erreur de log puisque l'instruction suivante passe:
    cerr<<log(double((wPos[i]+epsilon)/(wNeg[i]+epsilon)))<<endl;
    mais doit y avoir un truc qui m'échappe. Voici exactement tout ce que je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    const double epsilon = 0.0001;
    valarray<double> wPos;
    valarray<double> wNeg;
    /.../je remplis les valarray
    for(int i = 0; i < wPos.size();++i){
     
          cerr<<" wp "<<wPos[i]<<" wn "<<wNeg[i]<<endl;
          double wp = wPos[i];
          double wn = wNeg[i];
          double test = (wp+epsilon)/(wn+epsilon);
          double x = (wPos[i]+epsilon)/(wNeg[i]+epsilon);
          double val_0 = log(x);
          double val_1 = log(test);
          cerr<<"test "<<test<<endl;
          cerr<<"x "<<x<<endl;
          cerr<<"val 0"<<val_0<<endl;
          cerr<<"val 1"<<val_1<<endl;
         cerr<<log(double((wPos[i]+epsilon)/(wNeg[i]+epsilon)))<<endl;
    }
    Voila j'ai bug pour la valeur i = 0;
    ou j'obtiens le resultat suivant:
    wp 0 wn 0.00711111
    test 0.0138675
    x 0.0138675
    val 0nan
    val 1nan
    -4.27821

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/08/2013, 16h22
  2. [XL-2007] Erreur de calcul de la fonction Int() partie entiére d'un Nb en VB
    Par GOLDINGMAROC dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 01/03/2012, 17h31
  3. [Dates] Erreur de calcul avec la fonction mktime ?
    Par Xpertfly dans le forum Langage
    Réponses: 1
    Dernier message: 18/11/2008, 11h40
  4. erreur de linkage avec une fonction extern
    Par ali.ensi dans le forum C
    Réponses: 5
    Dernier message: 12/03/2008, 23h23
  5. erreur de calcul avec SUM
    Par peyro51 dans le forum Excel
    Réponses: 6
    Dernier message: 14/07/2007, 09h14

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