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 C++ Discussion :

Problème de boucle qui ne se répète pas!


Sujet :

Langage C++

  1. #1
    Invité
    Invité(e)
    Par défaut Problème de boucle qui ne se répète pas!
    Salut, j'ai une fonction qui me sert à générer des grands nombres.
    Seulement je rencontre un problème, lorsque je veux générer un nombre de 1024 bits par exemple en base 16;
    donc ça me fait 1024 / 4 = 256 chiffres. (n.nbChiffres est donc égale à 256)
    Il rentre seulement une seule fois dans la boucle et puis il en ressors même si ma condition i < n.nbChiffres est vraie!
    Ma fonction generate est déclarée statique.

    Code cpp : 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
     
    BigInt BigInt::generate (int nbBits, unsigned int base) {
            unsigned int nearestPowerOfTwo = math::Math::logn(base, 2);
            base = math::Math::power(2, nearestPowerOfTwo);
            BigInt n;
            n.base = base;
            n.nbChiffres = (nearestPowerOfTwo == 1) ? base : nbBits / base * nearestPowerOfTwo;
            //std::cout<<"nb chiffres : "<<n.nbChiffres<<std::endl;
            do {
                 for (unsigned long long int i = 0; i < n.nbChiffres; ++i) {
                     unsigned int c = math::Math::random(base);
                     //std::cout<<"c : "<<c<<" i : "<<(i < n.nbChiffres)<<std::endl;
                     n.insert(c, 0);
                 }
     
             } while (n.isNull());
             n.shorten();
             return n;
        }

    Bon là à part un problème de compilo, je ne vois pas du tout ce que ça pourrait être car logiquement il devrait continuer à parcourir la boucle jusqu'à que la condition soit fausse.

  2. #2
    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 : 49
    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
    Points : 16 213
    Points
    16 213
    Par défaut
    Quand tu dis "n.nbChiffres est donc égale à 256", comment le sais-tu ? Tu as regardé avec un débogueur ou un affichage, ou bien c'est une déduction que tu as faite en lisant le code ? Si c'st le deuxième cas, il ne faut pas : Quand on est en présence d'un bug, c'est justement que l'une de nos déductions sur le code est fausse, et il faut donc les valider une par une.

    Sinon, si tu veux qu'on puisse t'aider sur ce genre de choses, il faudrait que tu transforme ce code pour le rendre plus standard. Car ne sachant pas ce que font math::Math::logn (au passage, quelle notation moche, pourquoi répéter deux fois le mot math..., déjà qu'une fois serait de trop !). L'idéal serait que ton code soit compilable chez nous pour qu'on puisse l'exécuter de notre côté et voir ce qu'il en est.

    Quant à l'hypothèse d'un bug du compilateur sur une condition d'arrêt d'une boucle for, je ne serais pas par principe opposé aux paris, je crois que j'aurais là l'occasion d'en gagner un !
    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.

  3. #3
    Invité
    Invité(e)
    Par défaut
    J'ai imprimé la valeur de n.nbChiffres donc, je sais qu'elle vaut 256, ce n'est donc pas une déduction.

    La fonction logn calcule le logarithme d'une valeur en base b.

    Ok si tu veux parier sur un bug du compilateur moi je suis partant.

    Je vais voir avec un code standart, et je vais le poster.

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 945
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 945
    Points : 5 659
    Points
    5 659
    Par défaut
    Bonjour,
    Citation Envoyé par Lolilolight Voir le message
    Ok si tu veux parier sur un bug du compilateur moi je suis partant.
    Tu as une forte tendance à accuser le compilateur ou les bibliothèques que tu utilises.

    Tu ne penses pas qu'une telle erreur aurait été trouvée depuis longtemps ?
    Si les cons volaient, il ferait nuit à midi.

  5. #5
    Invité
    Invité(e)
    Par défaut
    L'erreur provenait de ma méthode insert n'est pas bonne du coup j'ai remplacé le insert par un push_back et ça marche. ^^

    J'oubliais que le cout en cas de boucle infinie dans ma fonction insert ne va pas afficher plusieurs fois le même message.

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

Discussions similaires

  1. Problème de boucle qui ne s'exécute pas
    Par bikine dans le forum Général Java
    Réponses: 1
    Dernier message: 01/04/2015, 08h28
  2. Problème QuickReport - bande qui ne se répète pas
    Par Rinduc dans le forum QuickReport
    Réponses: 6
    Dernier message: 26/01/2014, 09h53
  3. [Struts] Problème d'ActionForm qui ne s'instancie pas
    Par vallica dans le forum Struts 1
    Réponses: 35
    Dernier message: 10/04/2006, 22h39
  4. [VBA-E]une boucle qui ne s'arrète pas
    Par vivelesgnous dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 15/02/2006, 18h05
  5. [HTML] Image en fond d'un tableau qui ne se répète pas.
    Par yoyot dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 09/02/2005, 17h08

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