un algorithme du calcul du binomial plus efficace et rapide :
C++ :
template<typename T> T binomial(T& n, T& p) {
if ((n < 0) || (p < 0) || (p > n)) return 0;
T imax = (p > n / 2) ? n - p : n;
T n1 = n + 1;
T result = 1;
for(T i=1; i <= imax; ++i) result *= (n1 - i) / i;
return result;
}
C : pour les entiers :
unsigned binomial(unsigned n, unsigned p) {
if (p > n) return 0;
unsigned imax = (p > n / 2) ? n - p : n;
unsigned n1 = n + 1;
unsigned result = 1;
for (unsigned i = 1; i <= imax; ++i) result *= (n1 - i) / i;
return result;
}
ce code est facilement modifiable si l'on veut utiliser avec d'autre type entier, et renvoyer la valeur en un autre entier ou flottant
Seulement protos et déclarations dans les *.h, jamais de code.
long int fact(long int a)
{
long int res = 1, i;
for(i = 0; i <= a; i++) {
if(i != 0 && i != 1) res = res * i;
else res = res;
}
return res;
}
res = res; // SUPER UTILE !!!
Puisque tu ne veux rien avant la valeur 2:
long int fact(long int a)
{
long int res = 1;
while(a >= 2) res *= a--;
return res;
}
Modifié par jordane45 le 1/06/2014 à 02:45
C++ :
C : pour les entiers :
ce code est facilement modifiable si l'on veut utiliser avec d'autre type entier, et renvoyer la valeur en un autre entier ou flottant
Message édité : Ajout des balises de code.
29 mars 2010 à 09:35
Merci de faire cette remarque que je vais naturellement prendre en compte. Je dois avouer que j'y ai pensé, mais j'ai ensuite oublié.
Encore merci
P.S: n'hésitez pas a critiquer aussi :-)
Modifié par jordane45 le 1/06/2014 à 02:46
Puisque tu ne veux rien avant la valeur 2:
Message édité : Ajout des balises de code.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.