Le Thu, 22 Jan 2004 15:29:16 +0100, Rémy a écrit :
"dperetti" a écrit dans le message de news:buolf5$98g$
existe il une fonction factorielle en c++ toute faite style.... long fact (long ) merci
long fact(long n) { long result=1; for (,n>0,n--)
n>1 suffit
avec des ; c'est mieux
{ result = result * n;
soyons avares
result *=n;
} return result; }
kanze
"dperetti" wrote in message news:<buolf5$98g$...
existe il une fonction factorielle en c++ toute faite style.... long fact (long )
En C++ standard, non, mais Posix a une fonction lgamma qui peut servir :
double fact( int n ) { return exp( lgamma( n + 1.0 ) ) ; }
Sinon, il y a toujours la classique :
double fact( int n ) { return n > 1 ? n * fact( n - 1 ) : 1.0 ; }
Avec un type de retour de long, on est limité a n <= 20 ; l'utilisation d'un double nous permet jusqu'à n <= 170. Sur ma machine, au moins. Et a priori (mais je ne suis pas spécialisé dans les calculs numériques), j'imagine que la première version est plus précise. (Les résultats diffèrent dès le douzième chiffre chez moi.)
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
"dperetti" <dperetti@wanadoo.fr> wrote in message
news:<buolf5$98g$1@news-reader3.wanadoo.fr>...
existe il une fonction factorielle en c++ toute faite style.... long
fact (long )
En C++ standard, non, mais Posix a une fonction lgamma qui peut servir :
double
fact( int n )
{
return exp( lgamma( n + 1.0 ) ) ;
}
Sinon, il y a toujours la classique :
double
fact( int n )
{
return n > 1 ? n * fact( n - 1 ) : 1.0 ;
}
Avec un type de retour de long, on est limité a n <= 20 ; l'utilisation
d'un double nous permet jusqu'à n <= 170. Sur ma machine, au moins. Et a
priori (mais je ne suis pas spécialisé dans les calculs numériques),
j'imagine que la première version est plus précise. (Les résultats
diffèrent dès le douzième chiffre chez moi.)
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
existe il une fonction factorielle en c++ toute faite style.... long fact (long )
En C++ standard, non, mais Posix a une fonction lgamma qui peut servir :
double fact( int n ) { return exp( lgamma( n + 1.0 ) ) ; }
Sinon, il y a toujours la classique :
double fact( int n ) { return n > 1 ? n * fact( n - 1 ) : 1.0 ; }
Avec un type de retour de long, on est limité a n <= 20 ; l'utilisation d'un double nous permet jusqu'à n <= 170. Sur ma machine, au moins. Et a priori (mais je ne suis pas spécialisé dans les calculs numériques), j'imagine que la première version est plus précise. (Les résultats diffèrent dès le douzième chiffre chez moi.)
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
dperetti
"dperetti" a écrit dans le message news: buolf5$98g$
existe il une fonction factorielle en c++ toute faite style.... long fact (long ) merci
merci pour vos reponse a tous (je cherchais pour n <70)
"dperetti" <dperetti@wanadoo.fr> a écrit dans le message news:
buolf5$98g$1@news-reader3.wanadoo.fr...
existe il une fonction factorielle en c++ toute faite
style.... long fact (long )
merci
merci pour vos reponse a tous (je cherchais pour n <70)