Misez P'tit, Optimisez - N°32 (factorielle)
Modérateur : Politburo
- Marge
- Fonctionne à 14400 bauds
- Messages : 6172
- Enregistré le : 01 oct. 2008 14:39
- Localisation : En bas, tout au fond à gauche.
Re: Misez P'tit, Optimisez - N°32 (factorielle)
Well done! But as you noticed, there are many more keys to press at each calculation!
3 hommes, 3 demis, un 3a... Magnéto, Serge !
Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67__: A L I E N .
♣ ♦ « Boris », c'était juste Maurice enrhumé. ♥ ♠
Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67__: A L I E N .
♣ ♦ « Boris », c'était juste Maurice enrhumé. ♥ ♠
- Xerxes
- Fonctionne à 300 bauds
- Messages : 292
- Enregistré le : 02 avr. 2007 13:41
- Localisation : Allemagne
- Contact :
Re: Misez P'tit, Optimisez - N°32 (factorielle)
For more comfort, we need 2 program areas and some more steps:
Usage exampe: 69 P1 P2
Code : Tout sélectionner
P1:
01 -
02 -
03 1
04 Kin1
05 x<->y
Code : Tout sélectionner
P2:
01 Kin*1
02 =
03 x>0
04 Kout1
- Xerxes
- Fonctionne à 300 bauds
- Messages : 292
- Enregistré le : 02 avr. 2007 13:41
- Localisation : Allemagne
- Contact :
Re: Misez P'tit, Optimisez - N°32 (factorielle)
The FX-190 has no K vars, but Viktor Toth from rskey.org found an elegant solution:
Usage example: 69 P1
And an improved version for the FX-180P that uses a K var instead of M, based on his idea:
Usage example: 69 P1
Code : Tout sélectionner
01 Min
02 *
03 (
04 MR
05 -
06 1
07 )
08 x>0
09 1
10 =
And an improved version for the FX-180P that uses a K var instead of M, based on his idea:
Code : Tout sélectionner
01 Kin1
02 *
03 1
04 Kin-1
05 Kout1
06 x>0
07 x<->y
- C.Ret
- Fonctionne à 9600 bauds
- Messages : 3405
- Enregistré le : 31 mai 2008 23:43
- Localisation : N 49°22 E 6°10
Re: Misez P'tit, Optimisez - N°32 (factorielle)
En hommage à la nouvelle acquisition de notre ami badaze, je donne ici un programme de calcul de n! pour n normal, grand ou très grand.
Pour calculer 435!, il faut une HP-25 fonctionnelle pendant environ 8 min.
Mettre celle-ci en FIX 6 ou FIX 7, sasir le code ci-dessus puis saisir 435 et lancer le code par R/S (éventuellement précédé de GTO 00)
La calculatrice affiche d'abord la mantisse f.ffffff puis une pression sur X:Y (ou RDN) permet d'afficher l'exposant de 10.
Je trouve 435 ! ~= 3.492568 x10^ 960.
Code : Tout sélectionner
01 14 33 f CLreg . . . n
02 14 08 f LOG ... ... ... lg n
03 23 51 00 STO+0 . . . lg n
04 14 73 f LASTx . . lg n n
05 01 1 . lg n n 1
06 41 - . . . n-1
07 15 61 g x<>0?
08 13 02 GTO 02 ... ... ... n-1
09 24 00 RCL0 . . 0 SUM lg n
10 14 01 f INT . . . EEE
11 14 73 f LASTX . . EEE SUM lg n
12 15 01 g FRAC . . EEE .xxxxxxx
13 15 08 g 10^x . . EEE f.ffffff
Pour calculer 435!, il faut une HP-25 fonctionnelle pendant environ 8 min.
Mettre celle-ci en FIX 6 ou FIX 7, sasir le code ci-dessus puis saisir 435 et lancer le code par R/S (éventuellement précédé de GTO 00)
La calculatrice affiche d'abord la mantisse f.ffffff puis une pression sur X:Y (ou RDN) permet d'afficher l'exposant de 10.
Je trouve 435 ! ~= 3.492568 x10^ 960.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
- badaze
- Fonctionne à 14400 bauds
- Messages : 8385
- Enregistré le : 12 févr. 2007 18:36
- Localisation : Pas très loin de Lyon
- Contact :
Re: Misez P'tit, Optimisez - N°32 (factorielle)
Waouh.
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.
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.
- C.Ret
- Fonctionne à 9600 bauds
- Messages : 3405
- Enregistré le : 31 mai 2008 23:43
- Localisation : N 49°22 E 6°10
Re: Misez P'tit, Optimisez - N°32 (factorielle)
Bof.
Je viens à l'instant de me rendre compte qu'il ne fonctionne pas avec n égal à zéro.
Avec tout le mal que certains se sont donné au cours de ce MPO, je ne peux pas laisser cela en état.
Heureusement un patch est disponible et le même code corrigé donne:
Je viens à l'instant de me rendre compte qu'il ne fonctionne pas avec n égal à zéro.
Avec tout le mal que certains se sont donné au cours de ce MPO, je ne peux pas laisser cela en état.
Heureusement un patch est disponible et le même code corrigé donne:
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
- Marge
- Fonctionne à 14400 bauds
- Messages : 6172
- Enregistré le : 01 oct. 2008 14:39
- Localisation : En bas, tout au fond à gauche.
Re: Misez P'tit, Optimisez - N°32 (factorielle)
3 hommes, 3 demis, un 3a... Magnéto, Serge !
Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67__: A L I E N .
♣ ♦ « Boris », c'était juste Maurice enrhumé. ♥ ♠
Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67__: A L I E N .
♣ ♦ « Boris », c'était juste Maurice enrhumé. ♥ ♠
- Marge
- Fonctionne à 14400 bauds
- Messages : 6172
- Enregistré le : 01 oct. 2008 14:39
- Localisation : En bas, tout au fond à gauche.
Re: Misez P'tit, Optimisez - N°32 (factorielle)
Bonjour, C.Ret,
Joli programme que je viens de tester sur ma HP-29E (quelle machine ! j'en parlerai un autre jour). Je l'améliorerais volontiers pour qu'il donne les résultats sans logarithme quand ce n'est pas nécessaire... ce sera pour une autre fois.
Mais en attendant, je trouve une erreur pour 12! (qui serait donc mieux placé en entier dans l'affichage parce qu'il vaut 479 001 600) qui donne 4.790015988 * 10^8 (ou 479 001 598,8) ; je suppose que les erreurs de logarithmes se cumulent...
Ce n'est peut-être pas très grave pour ceux dont la mantisse dépasse les dix chiffres sur ces engins, mais gênant pour les autres. 13!, par exemple (le dernier à tenir entièrement dans l'affichage avec 6 227 020 800) donne 6,227020780*10^9 - je n'ai pas vérifié les autres.
Il faudrait probablement scinder ton programme pour utiliser un autre algorithme en première partie (pour les entiers jusqu'à 13) si les erreurs ne gênent pas le calcul au-delà (12! -> -251*10^-9 % ; 13! -> -321*10^-9 %). Quand tu auras le temps, hein, rien ne presse ; quant à moi je dois d'abord terminer mon épreuve d'équitation...
Joli programme que je viens de tester sur ma HP-29E (quelle machine ! j'en parlerai un autre jour). Je l'améliorerais volontiers pour qu'il donne les résultats sans logarithme quand ce n'est pas nécessaire... ce sera pour une autre fois.
Mais en attendant, je trouve une erreur pour 12! (qui serait donc mieux placé en entier dans l'affichage parce qu'il vaut 479 001 600) qui donne 4.790015988 * 10^8 (ou 479 001 598,8) ; je suppose que les erreurs de logarithmes se cumulent...
Ce n'est peut-être pas très grave pour ceux dont la mantisse dépasse les dix chiffres sur ces engins, mais gênant pour les autres. 13!, par exemple (le dernier à tenir entièrement dans l'affichage avec 6 227 020 800) donne 6,227020780*10^9 - je n'ai pas vérifié les autres.
Il faudrait probablement scinder ton programme pour utiliser un autre algorithme en première partie (pour les entiers jusqu'à 13) si les erreurs ne gênent pas le calcul au-delà (12! -> -251*10^-9 % ; 13! -> -321*10^-9 %). Quand tu auras le temps, hein, rien ne presse ; quant à moi je dois d'abord terminer mon épreuve d'équitation...
3 hommes, 3 demis, un 3a... Magnéto, Serge !
Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67__: A L I E N .
♣ ♦ « Boris », c'était juste Maurice enrhumé. ♥ ♠
Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67__: A L I E N .
♣ ♦ « Boris », c'était juste Maurice enrhumé. ♥ ♠
- C.Ret
- Fonctionne à 9600 bauds
- Messages : 3405
- Enregistré le : 31 mai 2008 23:43
- Localisation : N 49°22 E 6°10
Re: Misez P'tit, Optimisez - N°32 (factorielle)
EDIT:Excellente remarque. Je n'avais pas vu l'erreur de calcul liée aux logarithmes successifs pour les petits nombres. Mais cela n'a rien de surprenant, c'est un code pour calculer les factorielles de grands nombres (et de zéro pour la seconde version - là effectivement il y a un bien un souci de cohérence )
Ta suggestion d'utiliser deux méthodes de calcul en fonction de l'argument me plait bien.
Il faut que je cogite cela. Il doit y avoir un moyen de faire sans trop alourdir le programme, voir de se passer du test x=0? pour calculer la factorielle 0!
Je vais voir quelle astuce nous permet une HP-25. Il faut que je me documente un peu.
Les codes sont valables, il n'y a pas d'erreur en utilisant, comme indiqué, l'affichage FIX 6 ou FIX 7.
Voir explications dans post suivant
Ta suggestion d'utiliser deux méthodes de calcul en fonction de l'argument me plait bien.
Il faut que je cogite cela. Il doit y avoir un moyen de faire sans trop alourdir le programme, voir de se passer du test x=0? pour calculer la factorielle 0!
Je vais voir quelle astuce nous permet une HP-25. Il faut que je me documente un peu.
Les codes sont valables, il n'y a pas d'erreur en utilisant, comme indiqué, l'affichage FIX 6 ou FIX 7.
Voir explications dans post suivant
Modifié en dernier par C.Ret le 08 janv. 2020 22:49, modifié 2 fois.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
- gege
- Fonctionne à 14400 bauds
- Messages : 7141
- Enregistré le : 31 janv. 2008 14:24
- Localisation : Banlieue Paârisienne
- Contact :
Re: Misez P'tit, Optimisez - N°32 (factorielle)
Bonjour,
Un petit arrondi doit permettre de redonner leur bonne valeur à tes factorielles.
Sur une Citizen 280N récemment j'ai constaté que la table des factorielles était en ROM, ou du moins je le pense vu la rapidité d'apparition de la valeur.
Cette machine n'a qu'une mémoire mais peut traiter des statistiques (à une dimension) avec 80 valeurs éditables (donc stockées) !!
Moi pas comprendre.
G.E.
Un petit arrondi doit permettre de redonner leur bonne valeur à tes factorielles.
Sur une Citizen 280N récemment j'ai constaté que la table des factorielles était en ROM, ou du moins je le pense vu la rapidité d'apparition de la valeur.
Cette machine n'a qu'une mémoire mais peut traiter des statistiques (à une dimension) avec 80 valeurs éditables (donc stockées) !!
Moi pas comprendre.
G.E.
- C.Ret
- Fonctionne à 9600 bauds
- Messages : 3405
- Enregistré le : 31 mai 2008 23:43
- Localisation : N 49°22 E 6°10
Re: Misez P'tit, Optimisez - N°32 (factorielle)
J'ai retrouvé mes notes.
Gégé a raison, il suffit d'arrondir pour que les résultats soient tous corrects.
J'avais d'ailleurs prévu l'effet du cumul des erreurs d'arrondi des logarithmes successifs.
C'est d'ailleurs pour cela que j'avais précisé d'effectuer les calcul en FIX 6 ou FIX 7 c'est l'affichage du résultat dans ce format qui garanti la justesse des résultats y compris pour les petits nombres.
Ci-dessous les résultats pour les nombres de 0 à 16 en FIX 7: je ne trouve pas d'erreur (et des résultats identiques sur HP-15C et GO-25C).
Remarquons que dès 14! le calcul direct ne permet plus de déterminer complètement la valeur factorielle qui possède alors plus de 10 chiffres, l'unité n'est plus déterminée ni affichée car l' HP-25 passe en affichage scientifique.
Je ne modifie pas mon code, sauf peut-être à ajouter quelque part un FIX 7.
L'effet dû aux logarithmes approchés doit être minime (car log n est une fonction croissante en fonction de n et l'addition se fait avec n décroissant ) et ne doit être visible que pour les grands et très grands nombres.
Dans ce cas, il peut être prudent d'utiliser FIX 4 ou FIX 5 afin de ne pas afficher de chiffre erronés.
L'astuce est que les valeurs exactes des factorielles se terminent par des zéro de plus en plus nombreux au fur et à mesure que l'on multiplie par des multiples de deux et de cinq). L'arrondi corrige donc efficacement les erreurs des calculs, même dans le cas de logarithmes mal approchés (ce qui n'est pas le cas sur les HP)
Gégé a raison, il suffit d'arrondir pour que les résultats soient tous corrects.
J'avais d'ailleurs prévu l'effet du cumul des erreurs d'arrondi des logarithmes successifs.
C'est d'ailleurs pour cela que j'avais précisé d'effectuer les calcul en FIX 6 ou FIX 7 c'est l'affichage du résultat dans ce format qui garanti la justesse des résultats y compris pour les petits nombres.
Ci-dessous les résultats pour les nombres de 0 à 16 en FIX 7: je ne trouve pas d'erreur (et des résultats identiques sur HP-15C et GO-25C).
Code : Tout sélectionner
n Y: X: Calcul direct (par multiplications sucessives)
0 0.0000000 1.0000000 0!= 1. ok
1 0.0000000 1.0000000 1!= 1. ok
2 0.0000000 2.0000000 2!= 2. ok
3 0.0000000 6.0000000 3!= 6. ok
4 1.0000000 2.4000000 4!= 24. ok
5 2.0000000 1.2000000 5!= 120. ok
6 3.0000000 1.4400000 6!= 1440. ok
7 3.0000000 5.0400000 7!= 5040. ok
8 4.0000000 4.0320000 8!= 40320. ok
9 5.0000000 3.6288000 9!= 362880. ok
10 6.0000000 3.6288000 10!= 3628800. ok
11 7.0000000 3.9916800 11!= 39916800. ok
12 8.0000000 4.7900160 12!= 479001600. ok
13 9.0000000 6.2270208 13!=6227020800. ok
14 10.0000000 8.7178291 14!=8.7178291 E 10 même précision que le calcul direct
15 12.0000000 1.3076744 15!=1.3076744 E 12 " " " " "
16 13.0000000 2.0922790 16!=2.0922790 E 13 " " " " "
Remarquons que dès 14! le calcul direct ne permet plus de déterminer complètement la valeur factorielle qui possède alors plus de 10 chiffres, l'unité n'est plus déterminée ni affichée car l' HP-25 passe en affichage scientifique.
Je ne modifie pas mon code, sauf peut-être à ajouter quelque part un FIX 7.
L'effet dû aux logarithmes approchés doit être minime (car log n est une fonction croissante en fonction de n et l'addition se fait avec n décroissant ) et ne doit être visible que pour les grands et très grands nombres.
Dans ce cas, il peut être prudent d'utiliser FIX 4 ou FIX 5 afin de ne pas afficher de chiffre erronés.
En FIX 7, on a bien : 12 (R/S) affiche 4.7900160 (x::y) 8.0000000 c'est à dire exactement 12! = 4 ' 7900 ' 1600 c'est à dire 479'001'600.
L'astuce est que les valeurs exactes des factorielles se terminent par des zéro de plus en plus nombreux au fur et à mesure que l'on multiplie par des multiples de deux et de cinq). L'arrondi corrige donc efficacement les erreurs des calculs, même dans le cas de logarithmes mal approchés (ce qui n'est pas le cas sur les HP)
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
- Marge
- Fonctionne à 14400 bauds
- Messages : 6172
- Enregistré le : 01 oct. 2008 14:39
- Localisation : En bas, tout au fond à gauche.
Re: Misez P'tit, Optimisez - N°32 (factorielle)
Bonne correction. Il faut donc additionner le pas FIX 7. Je conviens que tu l'avais annoncé et que ce n'est pas nécessaire pour ce défi, mais ça le serait pour d'autres projets.
Sur la 34C ou la 15C, cela peut même être géré par le registre I - ça ne tiendrait toutefois pas dans un MPO...
Je cherche à programmer quelque chose de plus complet avec les combinaisons et les arrangements pour HP-29E/C, c'est la raison de mon retour à ce vieux sujet (toujours vert !). Il faut d'ailleurs observer que ces résultats ne pourraient être utilisés tels quels dans les formules que nous avons vues au lycée.
Sur la 34C ou la 15C, cela peut même être géré par le registre I - ça ne tiendrait toutefois pas dans un MPO...
Je cherche à programmer quelque chose de plus complet avec les combinaisons et les arrangements pour HP-29E/C, c'est la raison de mon retour à ce vieux sujet (toujours vert !). Il faut d'ailleurs observer que ces résultats ne pourraient être utilisés tels quels dans les formules que nous avons vues au lycée.
3 hommes, 3 demis, un 3a... Magnéto, Serge !
Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67__: A L I E N .
♣ ♦ « Boris », c'était juste Maurice enrhumé. ♥ ♠
Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67__: A L I E N .
♣ ♦ « Boris », c'était juste Maurice enrhumé. ♥ ♠
- C.Ret
- Fonctionne à 9600 bauds
- Messages : 3405
- Enregistré le : 31 mai 2008 23:43
- Localisation : N 49°22 E 6°10
Re: Misez P'tit, Optimisez - N°32 (factorielle)
Sur les Hp-19C Hp-29C et Hp-29E il est possible de calculer tous les chiffres d'une factorielle jusqu'à au moins .475.
Il suffit pour cela d'utiliser les nombreux registres comme je le fais avec mon SHARP 1211 pour les mémoriser. Le registre I (ou 0) servant alors d'index pour les multiplications à chaque boucle et reportant les retenues.
Il suffit pour cela d'utiliser les nombreux registres comme je le fais avec mon SHARP 1211 pour les mémoriser. Le registre I (ou 0) servant alors d'index pour les multiplications à chaque boucle et reportant les retenues.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
- Marge
- Fonctionne à 14400 bauds
- Messages : 6172
- Enregistré le : 01 oct. 2008 14:39
- Localisation : En bas, tout au fond à gauche.
Re: Misez P'tit, Optimisez - N°32 (factorielle)
Voici une première mouture HP-29C/E bien lourdingue (42 pas, 5 registres) pour calculer :
- les permutations (ou factorielles) ->GSB 1 ;
- les combinaisons ->GSB 2 ;
- les arrangements ->GSB 3,
à partir des fameuses formules
C (n,p) = n!/[(n-p)!*p!]
et
A (n,p) = n!/(n-p)!.
Exemples :
Combien de tirages de trois cartes différentes dans un jeu de 52 ?
52
ENTER
3
GSB 2
Réponse après 17 secondes (!) sur la 29E ou 49 secondes (!!) sur la 29C (en fait la 29E en mode Basse Vitesse) : 22 100. En comparaison, la 15C (pas la Limited Edition !) qui possède la fonction Cy,x trouve cette solution en... une seconde.
Si on a au départ 8 chevaux, combien y a-t-il de possibilités de tiercés ?
8
ENTER
3
GSB 3
Réponse (bcp plus rapide) : 336.
Ce qui me surprend, c'est surtout que le calcul de la combinaison nécessite le calcul de 52! (8.0658175*10^67), de 49! (6.08288186*10^62) et que la division de l'un par l'autre (lui-même multiplié par p!, soit 6) donne exactement le bon résultat. Comme dirait gege, "Moi pas comprendre."
Il doit y avoir de nombreux moyens d'améliorer ce programme, à commencer par l'algorithme qui ne tient pas compte ici des multiplications redondantes de factorielles.
- les permutations (ou factorielles) ->GSB 1 ;
- les combinaisons ->GSB 2 ;
- les arrangements ->GSB 3,
à partir des fameuses formules
C (n,p) = n!/[(n-p)!*p!]
et
A (n,p) = n!/(n-p)!.
Code : Tout sélectionner
LBL 3
-
STO 2
Last x
+
GSB 1
STO 3
RCL 2
GSB 1
RCL 3
x><y
/
RTN
LBL 2
STO 3
x><y
STO 4
x><y
-
GSB 1
STO 2
RCL 4
GSB 1
STO 4
RCL 3
GSB 1
STO*2
RCL 4
RCL 2
/
RTN
LBL 1
STO 0
1
STO 1
LBL 0
RCL 0
STO*1
DSZ
GTO 0
RCL 1
RTN
Combien de tirages de trois cartes différentes dans un jeu de 52 ?
52
ENTER
3
GSB 2
Réponse après 17 secondes (!) sur la 29E ou 49 secondes (!!) sur la 29C (en fait la 29E en mode Basse Vitesse) : 22 100. En comparaison, la 15C (pas la Limited Edition !) qui possède la fonction Cy,x trouve cette solution en... une seconde.
Si on a au départ 8 chevaux, combien y a-t-il de possibilités de tiercés ?
8
ENTER
3
GSB 3
Réponse (bcp plus rapide) : 336.
Ce qui me surprend, c'est surtout que le calcul de la combinaison nécessite le calcul de 52! (8.0658175*10^67), de 49! (6.08288186*10^62) et que la division de l'un par l'autre (lui-même multiplié par p!, soit 6) donne exactement le bon résultat. Comme dirait gege, "Moi pas comprendre."
Il doit y avoir de nombreux moyens d'améliorer ce programme, à commencer par l'algorithme qui ne tient pas compte ici des multiplications redondantes de factorielles.
3 hommes, 3 demis, un 3a... Magnéto, Serge !
Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67__: A L I E N .
♣ ♦ « Boris », c'était juste Maurice enrhumé. ♥ ♠
Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67__: A L I E N .
♣ ♦ « Boris », c'était juste Maurice enrhumé. ♥ ♠
- C.Ret
- Fonctionne à 9600 bauds
- Messages : 3405
- Enregistré le : 31 mai 2008 23:43
- Localisation : N 49°22 E 6°10
Re: Misez P'tit, Optimisez - N°32 (factorielle)
Je suis tout à fait d'accord, je n'ai pas rappelé ce point crucial dans mon second post. Grave erreur qui peut occasionner bien des soucis et qui fait que je n'ai pas immédiatement compris d'où venait l'écart que nous signalait Marge en utilisant mon code pour estimer la factorielle de 12 !
Je corrige donc immédiatement ma coupable omission et publie ci-dessous la version corrigée :
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.