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

Langage Java Discussion :

problème "Not a number"


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut problème "Not a number"
    Bonjour,
    à chaque fois que j'exécute mon programme, j'ai "Nan" sur ma console, "Not a Number"..
    je dois avoir normalement un résultat type double calculé à partir d'une formule (double Calcul = Somme/Count).
    Si j'ai ce genre d'erreur, ça veut dire que c'est le résultat obtenu qui n'est pas un double ou bien soit Somme ou Count = 0?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Par défaut
    De quel programme parles-tu?

    Donnes nous plus d'information.

  3. #3
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Ca te dérangerais de préciser un peu plus ? Car NaN n'existe pas dans java !
    A ta question je serais tenté de te répondre de revoir tes cours de MatLab.

  4. #4
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut
    ça existe bien sûr!ça concerne le type Double

    http://java.sun.com/j2se/1.4.2/docs/...ng/Double.html

  5. #5
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Mer... !
    Je retire ce que j'ai dit, je fais tout pour ne pas utiliser les flottants et leurs erreurs d'approximation, et voilà le résultat : à ne pas les utiliser je ne me rappelle même plus mes cours de base...
    Honte à moi
    Pour en revenir à ton problème peux-tu détailler et nous mettre une partie pertinente de ton code où tu rencontre ce problème ?

  6. #6
    Membre averti
    Homme Profil pro
    architecte java
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : architecte java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Par défaut
    Citation Envoyé par flora806 Voir le message
    Bonjour,
    à chaque fois que j'exécute mon programme, j'ai "Nan" sur ma console, "Not a Number"..
    je dois avoir normalement un résultat type double calculé à partir d'une formule (double Calcul = Somme/Count).
    Si j'ai ce genre d'erreur, ça veut dire que c'est le résultat obtenu qui n'est pas un double ou bien soit Somme ou Count = 0?
    Hi,
    si somme != 0 et count != 0 alors tu auras bien ton resultat dans calcul
    si somme != 0 et count == 0 alors tu auras Inifnity comme resultat
    si somme == 0 et count != 0 alors tu auras naturellement 0 en resultat
    si somme == 0 et count == 0 alors tu auras NaN comme resultat.

    sinon ecris ton calcul pour identifier les causes du probleme

  7. #7
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut
    c'est assez long, c'est pour ça que j'ai pas inséré de code, en plus ça fait appel à d'autres classes...
    je vais mettre ici la méthode principale de calcul:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    //mon main consiste à tester pour les 2 users(1 et2) et l'article255
    public static void main(String[] args) throws Exception {
    MaClasse test = new MaClasse();
    Data dSet = new Data();
     dSet.ParseFile();
     System.out.println(test.calculP(1,2,255, dSet));
    }
    //dSet-->après le parsing d'un fichier 
    public double CalculP(int userID, int otherUserID, int articleID, Data dSet) {
     
      double somme1 = 0;
      double somme2 = 0;
      double k2 = 0;
      int numberArticles = 0;
      double formule1 = 0.0;
      HashMap allArticlesUser1 = dSet.getArticles(userID);  
      HashMap allArticlesUserN = dSet.getArticles(NuserID);
      double moyennePrixUser1 = calculMoyenne(allArticlesUser1);
        //je regarde les achats en commun
      for (Iterator it = allArticlesUser1.keySet().iterator(); it.hasNext();){
     
          Integer articleKeyUser1 = (Integer)it.next();
          if (allArticlesUserN.containsKey(articleKeyUser1)){
              numberArticles++;
          }
          if (numberArticles>0){
     
      double SommeArticlesCommuns = Amax(userID, otherUserID);
      double SommeArticleU1U2 = getArticlesU1U2 (userID, otherUserID, dSet);
      //Nbr maxi des achats communs
      double Kx = Amax (userID, otherUserID);
      formule1 = Kx*SommeArticlesCommuns/SommeArticleU1U2;
     
          }
     
      for (int i = 0; i < UsersCount(); i++) {
       if (getPrice(i, articleID) != 0) {
     
        somme1 += formule1 * (getPrice(i, articleID) - moyennePrixUser1);
        somme2 += Math.abs(formule1);
       }
      }
      double k = 1 / somme2;
      k2 = moyennePrixUser1 + k * somme1; 
     
      System.out.println("valeur:" +k2);
     }
      return k2; 
        }
    j'espère que vous pourriez m'aider.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 239
    Par défaut
    Salut,

    dommage que le code ne soit pas complet. Tu peux faire un débugging avec l'instruction assert <condition>. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...
    double SommeArticleU1U2 = getArticlesU1U2 (userID, otherUserID, dSet);
    assert SommeArticleU1U2 > 0;
      //Nbr maxi des achats communs
      double Kx = Amax (userID, otherUserID);
      formule1 = Kx*SommeArticlesCommuns/SommeArticleU1U2;
    ...
    Ainsi en balisant les étapes importantes de ta méthode, tu verras où ça plantera.
    L'idéal est que tu travailles avec un framework de Test comme JUnit. Tu écris tes cas de test pour chacune de tes fonctions de calcul afin de garantir leur robustesse.

    Bon courage

  9. #9
    Membre émérite
    Avatar de Ayana
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 901
    Par défaut
    Une autre solution : levée d'exception

    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
    20
    21
    22
    23
    24
    25
    26
    public static void main(String[] args) {
     
      	  	float n1=10;
      	  	float n2=0;
     
      	  	DecimalFormat df = new DecimalFormat("########");
     
      	  	try{
     
      	  	    logger.info("Résultat de (" + df.format(n1) + "+" + df.format(n2) + ")/" + df.format(n2) + " : " + calcul(n1,n2));
      	  	}catch (MathException e){
      	  	    //traitement des erreurs arithmétiques (division par 0 ...)
      	  	    logger.fatal("Erreur arithmétique !!");
      	  	}
      	}
     
      	public static float calcul(float nb1, float nb2) throws MathException{
      	  logger.info("Calcul lancé ...");
      	  float nb3=(nb1+nb2)/nb2;
      	  if (Float.isInfinite(nb3) || Float.isNaN(nb3)) throw new MathException();
      	  // méthode pour arrondir à 2 chiffres après la virgule
    	    nb3 *= 100;
    	    nb3 = (int) (nb3+.5);
    	    nb3 /= 100;
    	    return nb3;
      	}
    ... avec une classe MathException ...

  10. #10
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Par défaut
    Salut,

    c'est vrai que le NaN, ça sent la division par 0...

    autrement, dans getArticlesU1U2(a,b,c) avant de renvoyer la valeur, tu test si elle est nulle (et si c'est le cas, affiche les valeurs) genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    double getArticlesU1U2(a,b,c){
        double result;
        ...
        if(result==0){
            System.out.println(" et merde, je vais diviser par 0 ! "+a+" "+b+" "+c);
        }
        return result;
    }

Discussions similaires

  1. Problème radio button espaces et quotes
    Par gamiel dans le forum Langage
    Réponses: 27
    Dernier message: 21/12/2011, 11h52
  2. problème de Wshshell.run avec quotes & variable
    Par frenchlion dans le forum VBScript
    Réponses: 8
    Dernier message: 29/11/2011, 17h35
  3. Réponses: 1
    Dernier message: 13/09/2007, 16h57
  4. Problème sur Request.ServerVariables("QUERY_STRING"
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 25/03/2005, 11h47

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