Probleme avec les variables

Résolu
doumbia.danse Messages postés 46 Date d'inscription   Statut Membre Dernière intervention   -  
doumbia.danse Messages postés 46 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour tout le monde,

Au fait j'ai créer ma fonction qui me calcule le factoriel d'un nombre et retourne un double, mais il arrive que si j'envoie un nombre assez grand il y ait un debordement de memoire ou quoi et soit le programme m'affiche 1 ou bien il m'affiche quelque chose illogique, je me demandais si je pouvais créer une variable qui puisse contenir même le factoriel de "5000" :-D

voici mon code avant tout :
double Factoriel(double nombre)
{
    int i=0;
    double nbre=1;
    for(i=1;i<=nombre;i++)
    {
        nbre=nbre*i;
    }
    return nbre;
}

Merci d'avance ;

2 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

C'est possible mais pas avec les types de bases (int, long, float, double).

Tu peux regarder Calcul de la factorielle pour de grands nombres.
Les codes sont en Java mais c'est les même problèmes qu'en C.
2
doumbia.danse Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
J'y ai jeter un coup d'oeil , donc si je comprends bien on ne peut pas le faire avec le langage c vu que le type BigInteger n'existe pas en C !

Merci .
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
BigInteger n'existe pas en C, mais comme le disait fiddy, tu as des bibliothèques dédiées.
Par exemple GMP : https://fr.wikipedia.org/wiki/GNU_MP
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
En plus de ce que dit KX, je tiens à souligner qu'il vaut mieux ne pas utiliser des float/double pour ce genre de calcul. Sinon tu auras des erreurs. Il faut travailler avec des entiers.
En natif (C99), tu as le type long long. Au-delà, il te faudra passer par une bibliothèque dédiée.
1
doumbia.danse Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
Ah d'accord, entendu!

Merci beaucoup
0