Probleme avec les variables

Résolu/Fermé
doumbia.danse Messages postés 46 Date d'inscription jeudi 3 juillet 2014 Statut Membre Dernière intervention 16 mars 2015 - 7 déc. 2014 à 15:06
doumbia.danse Messages postés 46 Date d'inscription jeudi 3 juillet 2014 Statut Membre Dernière intervention 16 mars 2015 - 7 déc. 2014 à 16:13
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 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
7 déc. 2014 à 15:14
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 jeudi 3 juillet 2014 Statut Membre Dernière intervention 16 mars 2015
7 déc. 2014 à 15:36
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 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
7 déc. 2014 à 15:39
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
7 déc. 2014 à 15:22
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 jeudi 3 juillet 2014 Statut Membre Dernière intervention 16 mars 2015
7 déc. 2014 à 16:13
Ah d'accord, entendu!

Merci beaucoup
0