us_30
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
28 août 2008 à 20:57
Bonjour,
Je n'ai trouvé cette formule nulle part, je l'ai déduite simplement de l'expression approximative d'une factorielle... mais pas de celle de stirling...
En effet, il existe d'autres expressions possibles. Celle dont je me suis servis est du à A. R. Forsyth publié en 1884 dans une édition britanique donnant pour s! = (2*pi)^0,5 * ( (s²+s+1/6)^0,5 / exp(1) ) ^ (s+0,5)
J'ai trouvé cette info dans l'encyclopédie des sciences mathématiques pures et appliquées de Jules Molk de 1914, heureusement ré-éditer au édition Jacques Gabay... (librairie à conseiller, au passage...)
Pourquoi cette formule de s! au lieu de Stirling ? En premier lieu, elle est plus précise en l'état que celle de Stirling (sauf si on la complète avec une série de correction. A noter que celle de Foryth peut-être aussi améliorée). Ensuite, en reprendre son logarithme est plus simple (en quelque sorte)...
Donc voici, l'explication détaillée pour obtenir le nb de chiffres de la factorielle :
Tu sais surement que si tu as un nombre, disons 3705, si tu veux connaitre le nb de chiffre, il suffit de prendre son log en base 10... of course ! donc si "a" est un nombre, on fait :
ln(a)/ln(10)... mais il faut aussi tenir compte que ce nb n'est pas entier... IL suffit de prendre alors sa partie entière auquelle on ajoute 1, soit :
[ ln(a) / ln(10) ] +1
[ ] désigne ici la partie entière, qui en informatique devient INT
Ensuite, pour s!, ben on fait la même chose :
[ ln ( (2*pi)^0,5 * ( (s²+s+1/6)^0,5 / exp(1) ) ^ (s+0,5) ) / ln(10) ] +1
Comme ln ( a * b ) = ln a + ln b, on a :
[ ln ( (2*pi)^0,5 ) + ln ( (s²+s+1/6)^0,5 / exp(1) ) ^ (s+0,5) ) / ln(10) ] +1
le calcul de : ln ( (2*pi)^0,5 ) vaut 0,9189... que j'arrondi à 0,92
j'arrange l'expression : (s²+s+1/6)^0,5 / exp(1) ) ^ (s+0,5) en distribuant la puissance, soit : ((s²+s+1/6)^0,5)^ (s+0,5) / exp(1) ) ^ (s+0,5)et comme ln(a/b)ln a - ln b, soit : ln ( ((s²+s+1/6)^0,5)^ (s+0,5) ) - ln( exp(1) ^ (s+0,5) )
(s+0,5) * ln ( (s²+s+1/6)^0,5) ) - (s+0,5)
Ensuite, si s tend vers l'infini, on (s²+s+1/6)^0,5 qui tend vers s
soit (s+0,5) * ln (s) - (s+0,5)
et enfin, en testant avec les factorielles, on peut encore corriger la dernière expression -(s+0,5) par -s d'autant que la simplification précédente est un peu sensible pour des valeurs faibles de s...
soit au final le nb de chiffre :
[0,92 + (s+0,5) * ln (s) - s ] / ln(10) + 1
CQFD
Amicalement,
Us.