Partage
  • Partager sur Facebook
  • Partager sur Twitter

depassement de capacité

probleme de variable avec la fonction factorielle

    1 septembre 2010 à 14:19:09

    voici mon probleme j'ai ecris un programmeen C pour calculer le factorielle
    d'un nombre entrer par l'utilisateur.le programme marche sauf qu'à partir
    du nombre 13 mon type de variable n'arive pas a contenir la reponse
    j'ai beau utilisé les type float et long long int ils sont aussi limiter
    à partir de certain nombre.votre aide sera la bienvenue. merci
    voici mon code


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

    int facto(int n)
    {
    if(n<0)
    return 0 ;
    if(n==1 || n==0)
    return 1;
    else
    return n * facto(n-1);
    }


    int main ()
    {

    int result;
    int nb;
    printf("entrer nombre : ");
    scanf("%d",&nb);

    result = facto(nb);
    if(result >0)
    printf("\nle facton de %d est %d \n",nb,result);
    else
    printf("\nvaleur incorrect\n") ;

    return 0 ;

    }

    • Partager sur Facebook
    • Partager sur Twitter
      1 septembre 2010 à 14:23:23

      Citation : wolanyo

      voici mon probleme j'ai ecris un programmeen C pour calculer le factorielle
      d'un nombre entrer par l'utilisateur.le programme marche sauf qu'à partir
      du nombre 13 mon type de variable n'arive pas a contenir la reponse
      j'ai beau utilisé les type float et long long int ils sont aussi limiter
      à partir de certain nombre.


      C'est normal.
      Pour faire des calculs de plus haute précision, il faut utiliser des algorithmes spécialisés. C'est un développement non trivial. Autrement il existe des bibliothèques appropriées avec lesquelles je n'ai pas d'expérience, mais je crois que d'autres membres si.
      • Partager sur Facebook
      • Partager sur Twitter
        1 septembre 2010 à 14:24:33

        Faire le calcul factorielle a nombre infinis te demandera une manipulation de chaine.
        Donc en fait de calculer case par case et de d'afficher ta chaine de caractere ou d'entier selon ce que tu prefere.
        • Partager sur Facebook
        • Partager sur Twitter
          1 septembre 2010 à 14:34:44

          Les balises code :
          <code type="c">ton code ici</code>
          
          • Partager sur Facebook
          • Partager sur Twitter
            1 septembre 2010 à 14:38:44

            Si ton but est effectivement de calculer des factorielles, tu devras passer par des libs tierces.
            Si ton but est de manipuler des opérations de factorielles (combinatoire par exemple), il existe parfois des formules pour simplifier le calcul en amont et ne pas passer par la case overflow.

            un exemple :

            20! / 19!

            Si tu es bourrin, tu auras un problème d'overflow. Sinon, tu peux simplifier en amont, et trouver la réponse qui est loin d'être overflow : c'est 20.

            Sinon, sachant qu'au bout de 13! tu es overflow, ce que je fais en général, quand je dois me servir de factorielles - non overflow - c'est un tableau statique qui contient les 13 valeurs pré-calculées : on gagne beaucoup en performance, en perdant 4*13 octets en mémoire....
            • Partager sur Facebook
            • Partager sur Twitter

            Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

              2 septembre 2010 à 20:22:02

              Virtman est ce que je peut avoir une ébauche d'algorithme si possible ca m'aidera beaucoup.si un autre membre aussi peut me l'envoyer je serai tres content merci.
              • Partager sur Facebook
              • Partager sur Twitter
                22 mars 2018 à 19:55:56

                Je voidrais calculer la somme des suite de fibronacci iinférieur à 4.000.00

                Dommage qu on me dit overflow.

                Jai assayer avec les double, int64, long mais sa na pas pris

                • Partager sur Facebook
                • Partager sur Twitter

                depassement de capacité

                × 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