factorielle

Les derniers trucs auxquels vous avez joué, les derniers ordinateurs que vous avez bidouillés.

Modérateur : Politburo

Répondre
Avatar de l’utilisateur
Ben
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 936
Inscription : 21 août 2016 19:04

factorielle

Message par Ben » 12 févr. 2017 23:19

Salut,

J'ai passé quelques heures sur mon petit PC-1500 à lui faire calculer tous les chiffres d'une factorielle.
Y a t'il un moyen de déterminer le nombre de chiffres du résultat ?

Ben

Avatar de l’utilisateur
ledudu
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4322
Inscription : 26 mars 2009 14:07
Localisation : Ile de France
Contact :

Re: factorielle

Message par ledudu » 13 févr. 2017 01:04

Salut,
Déterminer ou estimer ?
Y'en a qui ont essayé...

Avatar de l’utilisateur
leglatin
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 720
Inscription : 03 févr. 2003 20:46
Localisation : A proximité de Deauville (14)
Contact :

Re: factorielle

Message par leglatin » 13 févr. 2017 10:40

Faire une simple somme des logarithmes décimaux des facteurs ?
Commodore 7970 - Texas Instruments TI-30, 57, 80, 81, 82, 83, 85, 86, 89, 92 - Casio PB-100, PB-110, PB-410, PB-500, PB-700, PB-770, FA-3, FA-4, FA-10, FA-11, FA-20, FP-12, CM-1, OR-1, OR-1(E), OR-4, OR-8, RC-2, RC-4 - Canon X-07 - Philips VG8020, NMS8255, VY0010, VY0011, VS0080, D6450, VW0030, SBC3810, NMS1112, NMS1150, NMS1170 - Atari 1040 STE

Avatar de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6367
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: factorielle

Message par gege » 16 févr. 2017 02:26

Bonjour,
Utilises la formule de Stirling.
G.E.

Avatar de l’utilisateur
badaze
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6388
Inscription : 12 févr. 2007 19:36
Localisation : Pas très loin de Lyon
Contact :

Re: factorielle

Message par badaze » 16 févr. 2017 08:50

gege a écrit :Bonjour,
Utilises la formule de Stirling.
G.E.
Il en a même fait un livre.
:arrow:
Tout est bon dans le pocket.
Moi j'aime tout.... Casio, HP, Sharp, TI et les autres sauf que les TI semblent ne pas m'aimer :(
http://www.emmella.fr
Mes Casio - HP - Sharp - TI
Homme invisible.

Avatar de l’utilisateur
Ben
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 936
Inscription : 21 août 2016 19:04

Re: factorielle

Message par Ben » 16 févr. 2017 10:17

Bonjour,

Je fais le programme sur le PC-1500 et le Commodore 128.

Sur le Sharp, les tableaux sont limités à 255 éléments. Chaque élément peut contenir un chiffre jusqu'à 7 positions (sinon, on se retrouve avec 1.123456E10), ce qui nous fait 1785 chiffres. Avec l'algorithme de la somme des LOG, j'ai trouvé, de manière empirique, que 733! fais 1784 positions.

Bon, je vous épargne les 1784 chiffres du résultat

Code : Tout sélectionner

10 FAST:SCNCLR
20 PRINT "CALCUL DE LA FACTORIELLE"
30 PRINT "------------------------"
40 DIM FA(500)
50 INPUT "NB=";NB
60 FA(1)=1:B=1:T=TI
70 FOR I=1 TO NB
80 J=0
90 J=J+1
100 RL=FA(J)*I+RT:IF RL>999999999 THEN PRINT I,B,RL:STOP
110 RT=INT(RL/1000000)
120 FA(J)=RL-1000000*RT
130 IF J=B AND RT<>0 THEN B=B+1
140 IF J<B THEN 90
150 NEXT I
155 T=(TIME-TI)/60
160 PRINT "FACTORIELLE DE";NB;"="
165 PRINT FA(B);
166 T=1
190 FOR I=B-1 TO 1 STEP -1
200 WN$=STR$(FA(I)):GOSUB 300:PRINT WN$;" ";
205 T=T+1:IF T>9 THEN PRINT:T=0
210 NEXT I
220 PRINT:PRINT "calcul en ";t; "sec"
230 print "nbr tableau=";b
240 print "nbr chiffre=";(b-1)*6+len(str$(fa(b)))-1
250 end
300 wn$=right$(wn$,len(wn$)-1)
310 if len(wn$)=6 then 399
320 for j=1 to 6-len(wn$)
330 wn$="0"+wn$
340 next j
399 return
La version C128 du programme. Les éléments du tableau ne peuvent dépasser 6 positions, mais le tableau peut être plus grand que 255 éléments

Ben

Avatar de l’utilisateur
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2719
Inscription : 06 sept. 2011 14:57
Localisation : Normandie / Antwerpen

Re: factorielle

Message par Hobiecat » 16 févr. 2017 22:09

badaze a écrit :Il en a même fait un livre.
:arrow:
:mrgreen:

Avatar de l’utilisateur
C.Ret
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1843
Inscription : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: factorielle

Message par C.Ret » 17 févr. 2017 14:57

Je confirme, la factorielle de 733 se compose effectivement de 1784 chiffres.

Image

J'ai vérifié moi aussi sur un Commodore C128D, mais avec un programme bien plus court, en tirant profit des boucles DO...LOOP que permet son Basic Microsoft v7.0
et en mémorisant la factorielle directement sous la forme d'une chaine de caractères.
Comme les registres ne peuvent contenir que 256 caractères, j'utilise implicitement un tableau F$(...)

Code : Tout sélectionner

10 fast:clr:c%=1:f$(0)="1":input "n ";n
20 do while n%<n:n%=n%+1:for f=0 to f%:for i=len(f$(f)) to 1 step -1:q%=r%+n%*val(mid$(f$(f),i,1)):r%=q%/10:q%=q%-10*r%:mid$(f$(f),i,1)=chr$(48+q%):next i,f
30 do while r%:q%=r%:r%=r%/10:q%=q%-10*r%:c%=c%+1:if len(f$(f%))>254then f%=f%+1
40 f$(f%)=chr$(48+q%)+f$(f%):loop:loop:print n%;"[←]!=";:for f=f% to 0 step -1:print f$(f);:next f:print ".(";c%;")":end
SHARP PC-1211 + CE-121 + CE-122. | VIC 20 Commodore 128D + Printer P-803. | TI-57 LCD | TI-74 BasiCalc | TI-92 II | HP-15C | HP-28S + HP82240A | HP-41C + (2 memory + stat + IR) modules. | HP Prime Wireless Graphing Calculator . .Sommaire des M.P.O.. . Sommaire du P.C.T.M. .

Avatar de l’utilisateur
Ben
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 936
Inscription : 21 août 2016 19:04

Re: factorielle

Message par Ben » 17 févr. 2017 16:46

Le calcul de la factorielle se fait de la ligne 70 à 150. Le reste, ce sont les stats, la présentation, ...

Avatar de l’utilisateur
badaze
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6388
Inscription : 12 févr. 2007 19:36
Localisation : Pas très loin de Lyon
Contact :

Re: factorielle

Message par badaze » 17 févr. 2017 20:56

C.Ret a écrit :Je confirme, la factorielle de 733 se compose effectivement de 1784 chiffres.

Image

J'ai vérifié moi aussi sur un Commodore C128D, mais avec un programme bien plus court, en tirant profit des boucles DO...LOOP que permet son Basic Microsoft v7.0
et en mémorisant la factorielle directement sous la forme d'une chaine de caractères.
Comme les registres ne peuvent contenir que 256 caractères, j'utilise implicitement un tableau F$(...)

Code : Tout sélectionner

10 fast:clr:c%=1:f$(0)="1":input "n ";n
20 do while n%<n:n%=n%+1:for f=0 to f%:for i=len(f$(f)) to 1 step -1:q%=r%+n%*val(mid$(f$(f),i,1)):r%=q%/10:q%=q%-10*r%:mid$(f$(f),i,1)=chr$(48+q%):next i,f
30 do while r%:q%=r%:r%=r%/10:q%=q%-10*r%:c%=c%+1:if len(f$(f%))>254then f%=f%+1
40 f$(f%)=chr$(48+q%)+f$(f%):loop:loop:print n%;"[←]!=";:for f=f% to 0 step -1:print f$(f);:next f:print ".(";c%;")":end
Quand on pense que le nombre d'atomes dans tout l'univers observable est estimé à 2x10^79 !!!
Tout est bon dans le pocket.
Moi j'aime tout.... Casio, HP, Sharp, TI et les autres sauf que les TI semblent ne pas m'aimer :(
http://www.emmella.fr
Mes Casio - HP - Sharp - TI
Homme invisible.

Avatar de l’utilisateur
C.Ret
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1843
Inscription : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: factorielle

Message par C.Ret » 18 févr. 2017 09:48

Ben a écrit :Le calcul de la factorielle se fait de la ligne 70 à 150. Le reste, ce sont les stats, la présentation, ...
Très juste, et j'ai oublié de dire que mon programme très court est aussi très lent. Il est même bien trop lent et il lui faut plus de 4h pour déterminer les 1784 chiffres de 733!.


Voici une version plus rapide:

Code : Tout sélectionner

list

10 fast:clr:c%=1:dim f(399):f(0)=1:s$="":input "[wht]n [yel]";n%:ti$="000000":if n%>1 then begin:e%=9-log(n%)/log(10):e=int(10↑e%)
20 for n=2 to n%:r=0:for f=0 to f%:q=n*f(f)+r:r=int(q/e):f(f)=q-e*r:next f:if r then f%=f%+1:f(f%)=r
30 next n:c%=1+log(f(f%))/log(10)+e%*f%:bend
40 print n%;"[←]!=";:for f=f% to 0 step -1:color 5,4+(fand1):print right$(s$+mid$(str$(f(f)),2),e%);:s$="00000000":next f:print ".[wht](";c%;":";f%;")";ti$:getkey s$

ready.
La saisie de N et l'initialisation du calcul se font à la ligne 10,
Le calcul des chiffres de la factorielle à la ligne 20,
La détermination du nombre de chiffres à la ligne 30,
La mise en forme et l'affichage des résultats à la ligne 40.

Le GETKEY final permet de figer l'écran afin de capturer l'intégralité des informations qui y figure.
Le nombre de décimales mémorisées dans chaque registre F() est calculé au début du programme (variable E%).
Le nombre de décimales C% de la factorielle est obtenu à la fin de leur détermination à l'aide de E%, du nombre F% de registres F() utilisés et du nombre de chiffres contenu dans le dernier registre F(F%).

Image

L'alternance des couleurs met en évidence la succession des registres F().
( 1784 : 297 )002511 signifie que la factorielle comporte 1784 chiffres, utilise 298 registres (de 0 à 297) et que la détermination a nécessité 00h 25min 11s.

badaze a écrit :Quand on pense que le nombre d'atomes dans tout l'univers observable est estimé à 2x10^79 !!!


Effectivement, mais il y a maintenant déjà un certain temps que je me prépare activement à observer l'invisible et l'incommensurable.
SHARP PC-1211 + CE-121 + CE-122. | VIC 20 Commodore 128D + Printer P-803. | TI-57 LCD | TI-74 BasiCalc | TI-92 II | HP-15C | HP-28S + HP82240A | HP-41C + (2 memory + stat + IR) modules. | HP Prime Wireless Graphing Calculator . .Sommaire des M.P.O.. . Sommaire du P.C.T.M. .

Avatar de l’utilisateur
Ben
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 936
Inscription : 21 août 2016 19:04

Re: factorielle

Message par Ben » 19 févr. 2017 14:58

J'ai calculé 733! sur le Sharp, le pauvre. Il a tout de même mis 3h48 :-)

Avatar de l’utilisateur
leglatin
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 720
Inscription : 03 févr. 2003 20:46
Localisation : A proximité de Deauville (14)
Contact :

Re: factorielle

Message par leglatin » 19 févr. 2017 18:26

Voici ma version pour TI-57 : avec ce programme, elle peut calculer la factorielle d'un entier naturel compris entre 1 et 54 inclus, avec tous ses chiffres.

Pour obtenir les chiffres de n!, saisir RST, n, R/S. A l'issue du calcul, les chiffres de n! sont stockés en mémoire tel que :

n!=[RCL7]*10^54+[RCL6]*10^45+[RCL5]*10^36+[RCL4]*10^27+[RCL3]*10^18+[RCL2]*10^9+[RCL1]

Dans le cas où le calcul s'achève avec l'affichage de 0 en notation scientifique ( "0 00" ), multiplier le tout par 10^9.

Exemple : 54!. On obtient à l'issue du calcul l'affichage "0 00" et en mémoire :
RCL7 = 230843697
RCL6 = 339241380
RCL5 = 472092742
RCL4 = 683027581
RCL3 = 083278564
RCL2 = 571807941
RCL1 = 132288000

d'où 54! = 230843697339241380472092742683027581083278564571807941132288000000000000

© C. Le Glatin, 1992. :mrgreen:

Image

PS : Le pas 03 se programme par programmation synthétique ; si vous ne savez faire, pas grave : enlever les pas 00 à 02 du programme et saisissez manuellement RST, INV C.t, n, R/S pour lancer le calcul.
Commodore 7970 - Texas Instruments TI-30, 57, 80, 81, 82, 83, 85, 86, 89, 92 - Casio PB-100, PB-110, PB-410, PB-500, PB-700, PB-770, FA-3, FA-4, FA-10, FA-11, FA-20, FP-12, CM-1, OR-1, OR-1(E), OR-4, OR-8, RC-2, RC-4 - Canon X-07 - Philips VG8020, NMS8255, VY0010, VY0011, VS0080, D6450, VW0030, SBC3810, NMS1112, NMS1150, NMS1170 - Atari 1040 STE

Avatar de l’utilisateur
badaze
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6388
Inscription : 12 févr. 2007 19:36
Localisation : Pas très loin de Lyon
Contact :

Re: factorielle

Message par badaze » 19 févr. 2017 20:45

Un mot. Bravo !!!

Je n'aurais jamais pensé que ce soit possible.
Tout est bon dans le pocket.
Moi j'aime tout.... Casio, HP, Sharp, TI et les autres sauf que les TI semblent ne pas m'aimer :(
http://www.emmella.fr
Mes Casio - HP - Sharp - TI
Homme invisible.

Avatar de l’utilisateur
Ben
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 936
Inscription : 21 août 2016 19:04

Re: factorielle

Message par Ben » 20 févr. 2017 18:05

C.Ret a écrit :la détermination a nécessité 00h 25min 11s.
Bravo! Mon programme met plus du double, un peu moins d'une heure pour faire le calcul

Répondre

Revenir vers « A quoi t'as joué hier ? »