Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Problème] Un bug avec les multiples de 10^2

    8 décembre 2005 à 7:05:48

    Bonjour tout le monde :)

    Je débute en C et j'ai essayé de mettre en place en guise de premier essai un convertisseur décimal -> octal. J'ai terminé de le coder, tout marche à merveille... mais...

    J'ai un problème avec le nombre 10^2... En effet, à un moment de mon code, j'utilise l'instruction suivante :

    z = y*pow(10,exposant);


    y prend une valeur quelconque (le problème est toujours présent peu importe la valeur de y).
    Mais si (et seulement si) exposant a pour valeur 2, j'obtiens le résultat moins 1...

    Exemple :
    y = 1
    exposant = 2
    z = 99

    Je n'ai détecté ce problème que pour un exposant 2 et peu importe la valeur de y...

    J'ai pu y remédier par un simple if en incrémentant z si l'exposant est de 2 mais ce n'est pas très propre, j'aimerais comprendre le pourquoi du comment...

    Merci d'avance ;)
    • Partager sur Facebook
    • Partager sur Twitter
      8 décembre 2005 à 7:37:32

      Je n'ai pas ce problème chez moi personnellement. Tu utilises quoi comme types ? (Et de toute façon, tu ne peux jamais compter sur la précision des flottants, c'est le principe même des flottant : Les calculs sont imprécis)
      • Partager sur Facebook
      • Partager sur Twitter
        8 décembre 2005 à 9:09:59

        J'ai regardé dans le MSDN de microsoft, si tu utilises un %o pour afficher un entier, il te le fera sous sa forme octal. Donc pas besoin de convertir tes nombres :)
        • Partager sur Facebook
        • Partager sur Twitter
          8 décembre 2005 à 19:37:15

          T'inquiète je ne fais pas ce convertisseur parce que j'ai besoin de convertir des nombres en octal, une calculette suffit pour ça ;) Ce qui m'intéresse c'est surtout d'appliquer l'algorythme que j'ai grifonné sur un papier dans un programme C sur mon ordinateur. J'ai déjà réussi à le programmer en basic sur ma calculatrice, il marche parfaitement, d'ailleurs je l'ai modifié un petit peu pour qu'il gère n'importe quelle base (binaire, octale, hexadécimal, base 3, base 9, base 6586, n'importe quelle base). Ca me paraissait sympa de passer ça en C pour tester un peu le langage, et d'ailleurs le programme fonctionne. Le problème c'est juste cette histoire de 10^2, je trouve ça vraiment bizarre et j'aimerais bien comprendre le pourquoi du comment :p

          Je vous livre le code source complet tant qu'à faire (convertisseur multi-bases), peut-être que vous y trouverez une erreur...


          #include <stdio.h>
          #include <stdlib.h>
          #include <math.h>

          int main(int argc, char *argv[])
          {
            printf ("Bienvenue dans le convertisseur 10toX de Klomac.\n\nCe programme vous permet de convertir n'importe quel nombre entier"
            " en base\ndecimal vers une autre base de votre choix (exemples : binaire, octale,\nhexadecimale etc...).");
           
            char fin = 0,continuer;
           
            while (fin == 0)
            {
                long nombre,base;
                printf ("\n\nQuel nombre decimal souhaitez-vous convertir ? ");
                scanf ("%d",&nombre);
                printf ("\n\nQuelle base souhaitez-vous utiliser pour le resultat ? ");
                scanf ("%d",&base);
                char exposant = 0;
                long x = 0;
                while (x <= nombre)
                {
                  x = pow(base,exposant);
                  exposant++;
                }
                exposant-=2;
               
                long resultat=0,reste=nombre,y;
                double z;
                while (exposant >= 0)
                {
                  if (pow(base,exposant) <= nombre)
                  {
                    y = reste / pow(base,exposant);
                    reste = reste - y*pow(base,exposant);
                    z = y*pow(10,exposant);
                    resultat = resultat + z;
                  }
                  exposant--;       
                }
                printf ("\n\nLe nombre %d en base 10 devient %d en base %d",nombre,resultat,base);
                printf ("\n\nVoulez-vous convertir un autre nombre ? [ 1 : oui ; 0 : non ] ");
                scanf ("%d",&continuer);
                printf ("\n\n");
                if (continuer == 1) { fin = 0; }
                else { fin = 1; }
            }
            return 0;
          }



          Pour ceux qui voudraient tester le programme : Télécharger

          Edit : Je remercie Simon-le-zeus qui a trouvé la solution : la fonction pow renvoie un double, il faut donc que la variable (dans mon programme elle s'appelle z) soit un double. Ca marche nickel :) J'ai édité le code source ci-dessus et corrigé l'erreur :)
          • Partager sur Facebook
          • Partager sur Twitter

          [Problème] Un bug avec les multiples de 10^2

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown