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

avec Java Discussion :

Problème de résultat négatif


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Par défaut Problème de résultat négatif
    salut à tous
    j'ai un petit problème dans le résultat donné par le code suivant, normalement il affiche un résultat positif mais il m'a affiché un résultat négatif malgré tout les éléments du tableau sont positifs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int sum=0;
     
    int s=tab.size();// s est plus de 36
        for(int i=0; i<s;i++) 
    	 {
    	      som=som + (tab[i]*(int)Math.pow(2,s-i-1));
    	 }
        System.out.println("somme:" +" "+ som);

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Qoe,

    C'est typique d'un débordement : la valeur dépasse la capacité du type utilisé.

    En clair, la somme calculée dépasse 2^31 -1, soit 2 147 483 647

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Par défaut
    ah oui exactement monsieur , merci pour votre réponse
    je pense qu'il faut utiliser le type long pour la valeur de " som".
    Et est ce que je change le "(int)Math.pow(2,s-i-1)" par long aussi?

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Nai,

    Tant qu'à faire, oui.

    Mais il n'est pas sûr que ça suffise, ça dépend du contenu du tableau.

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Par défaut
    Merci pour votre réponse
    concernant le type de contenu de tableau est entier
    moi j'ai fait carrément le variable "som" de type double
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    som=som + (tab[i]*Math.pow(2,s-i-1));
    pour éviter le cas de "s" est trés grand
    alors que pensez vous monsieur?

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Que tu va avoir un résultat approximé. Les double perdent de la précision sur les grande valeurs. En plus, tu code ne doit pas donner de valeur après la virgule, donc une virgule flottante est innapropriée. on code utilise au moins 36 bits, a voir ce qu'il y a dans tab pour connaitre le max, mais un long sera vraissemblablement plus approprié. Faute de quoi, un BigDecimal devra éventuellement prendre le relai.
    tab contient quoi? Parce que ça m'a l'air d'un code dont le but serait de reconstituer un nombre à partir de ses bits (avec tab contenant des 0 ou des 1).

    Si, et seulement si c'est le cas, ce code est beaucoup plus performant et approprié:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    long resultat = 0;
    int s=tab.size();// s est plus de 36
    for(int i=0; i<s;i++)
        if tab[i]==1
            resultat|=1L<<(s-i-1);

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

Discussions similaires

  1. [MySQL] problème de résultat avec une requête
    Par jexl dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 29/03/2006, 23h23
  2. [SQL] Problème de résultat avec une requête
    Par raptorman dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/01/2006, 17h16
  3. Problème de résultat
    Par Mephisto08 dans le forum C
    Réponses: 21
    Dernier message: 28/09/2005, 08h57
  4. [VBA] Calcul du PGDC --> Problème de résultat
    Par snoopy69 dans le forum Access
    Réponses: 16
    Dernier message: 25/08/2005, 14h23
  5. problème avec résultat de recherche multi-critères
    Par audrey_desgres dans le forum Access
    Réponses: 2
    Dernier message: 23/06/2005, 11h00

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