Misez P'tit, Optimisez - N°32 (factorielle)

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Répondre
Avatar du membre
badaze
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 8402
Enregistré le : 12 févr. 2007 18:36
Localisation : Pas très loin de Lyon
Contact :

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par badaze »

En tapotant sur mon HP 29C. En 8 pas de programmes.

Code : Tout sélectionner

STO 0
1
LBL 0
RCL 0
x
DSZ
GTO 0
RTN
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 du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2931
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par zpalm »

Pas mal, mais ça ne marche pas pour 0!

En 8 pas également sur HP-25 (après un f Clear Prgm), et pour les entiers >0:

Code : Tout sélectionner

STO 0
STO/ 0
STO* 0
1
-
x#0?
GTO 03
RCL 0
Avatar du membre
badaze
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 8402
Enregistré le : 12 févr. 2007 18:36
Localisation : Pas très loin de Lyon
Contact :

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par badaze »

Je peux gagner un pas en enlevant le RTN. En effet, la mémoire du 29C est remplie par défaut avec le code de la touche R/S qui comme chacun sait arrête le programme.
:mrgreen:

Pour le 0! en effet ça ne marche pas du tout. Mais qui a besoin de calculer 0! hein. Qui ?
:twisted:
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 du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6186
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par Marge »

badaze a écrit : 02 févr. 2018 00:15 Je peux gagner un pas en enlevant le RTN. En effet, la mémoire du 29C est remplie par défaut avec le code de la touche R/S qui comme chacun sait arrête le programme.
:mrgreen:

Pour le 0! en effet ça ne marche pas du tout. Mais qui a besoin de calculer 0! hein. Qui ?
:twisted:
Pas moi !

Je te félicite, badaze, tu avais déjà trouvé un pgm rpn digne d'intérêt dans le MPO associé, sur lequel nous sommes assis... bravo !

Bon, zpalm, tu as tellement de lauriers sur la tête que le risque serait de terminer dans une casserole (de fonte, naturellement), avec un peu de pommes vapeur.
Néanmoins, reçois mes félicitations les plus chaleureuses : elles sont amplement méritées ! :D
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é.
Avatar du membre
Xerxes
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 292
Enregistré le : 02 avr. 2007 13:41
Localisation : Allemagne
Contact :

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par Xerxes »

The circular program execution of the TI-62 allows a very short code:

Code : Tout sélectionner

00 STO 0
01 *
02 INV DSZ
03 R/S
04 RCL 0
Usage example: 69 RST R/S

Even shorter, but less comfortable:

Code : Tout sélectionner

00 *
01 INV DSZ
02 R/S
03 RCL 0
Usage example: 69 STO 0 RST R/S

A small disadvantage to the nice code of zpalm for the TI-57 is the pending operator after the calculation,
that has to be cleared by ON/C eventually.
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6186
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par Marge »

Even shorter, but less comfortable:

00 *
01 INV DSZ
02 R/S
03 RCL 0

Usage example: 69 STO 0 RST R/S
A little 4-steps program that sounds great! Congratulations!
I wonder... 3-steps, well, seems impossible to me... :wink:
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é.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3419
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par C.Ret »

badaze a écrit : 02 févr. 2018 00:15 [...]Pour le 0! en effet ça ne marche pas du tout. Mais qui a besoin de calculer 0! hein. Qui ? :twisted:
Ben euh! Je sais pas ... mais ...

Le code en boucle des TI peut aussi être utilisé sur les HP :

Par exemple pour une HP-25/25C :

Code : Tout sélectionner

01-  15 71	g x=0?
02-  13 00	GTO 00
03-     61	×
04-  14 73	f LastX
05-      1	1
06-     41	-
07-  13 01	GTO 01
Programmation :
Mettre le commutateur sur le mode PRGRM, taper f CLEAR PRGM et saisir le code ci-dessus.
Revenir en mode RUN à l'aide du commutateur, mettre le pointer d'exécution en début de code en tapant [ GTO ] 00

Usage:
Pour calculer la factorielle de n entrer [ 1 ] [ ENTER↑ ] n [ R/S ]
La calculatrice mouline et s'arrête en affichant 0,000 . Pour lire la valeur de la factorielle presser sur l'une des trois touches suivantes [ + ] ,[ R↓ ] ou [ X<>Y ]

L'astuce est que sur une HP-25/25C, le GTO 00 remet le pointer en début de zone programme et arrête le déroulement des opérations alors que le GTO 01 revient au début sans provoquer d'arrêt.

Ne pas oublier de taper [ 1 ][ ENTER^] avant d'introduite toute nouvelle valeur n.

Ce code permet aux éventuels types bizarres qui trainent sur ce forum de calculer 0!

Ci-dessous un code un peu plus court qui fonctionne de la même manière pour calculer les factorielles pour n>0 :

Code : Tout sélectionner

01-     61	x
02-  14 73	LastX
03-      1	1
04-     41	-
05-  15 61	X≠0?
06-  13 01	GTO 01
Comme pour le code précèdent, ne pas oublier de taper [ 1 ][ ENTER^] avant d'introduite toute nouvelle valeur n et de faire apparaitre le résultat en évacuant de l'affichage la valeur 0,0000 à l'aide d'une des trois touches suggérées.
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.
casuffitdeschanel
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 650
Enregistré le : 21 sept. 2009 21:56
Localisation : Metz

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par casuffitdeschanel »

Il me semble que la meilleure facon est d'avoir tous les resultats precalcules dans une table en ROM, il suffit d'aller chercher le resultat a sa place sans rien calculer, je me demande si nos vieilles machines font ainsi?
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6186
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par Marge »

casuffitdeschanel a écrit : 04 févr. 2018 19:34 Il me semble que la meilleure facon est d'avoir tous les resultats precalcules dans une table en ROM, il suffit d'aller chercher le resultat a sa place sans rien calculer, je me demande si nos vieilles machines font ainsi?
Cela ne me semble pas le cas, au contraire (éventuel, mais à vérifier au cas par cas) des logarithmes, cosinus et autres... zpalm ? tu es où ? le CORDIC s'il te plaît !)

Aussi loin que je me souvienne (le feu crépite dans la cheminée...), la première fonction factorielle qui arrive sur une HP de poche est sur la HP-34C. Or cette fonction, qui est aussi la fonction GAMMA (factorielle pour les entiers ET les nombres décimaux) ne semble pas fonctionner par table ; le calcul est très long.

Mais cela reste à vérifier.
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é.
Avatar du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2931
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par zpalm »

La première HP de poche avec la fonction factorielle est la HP-45, ensuite on retrouve cette fonction sur les HP-65, 55, 67, 27, 32E, 37E, 38E/C, 41C et 34C qui est la première pour laquelle c'est une fonction Gamma pour les nombres non entiers. On retrouvera cette fonction Gamma sur la 11C et la 15C.
Pour l'implémentation il faudrait vérifier l'algorithme dans les listings VASM de la 41.
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6186
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par Marge »

zpalm a écrit : 04 févr. 2018 23:18 La première HP de poche avec la fonction factorielle est la HP-45, ensuite on retrouve cette fonction sur les HP-65, 55, 67, 27, 32E, 37E, 38E/C, 41C et 34C qui est la première pour laquelle c'est une fonction Gamma pour les nombres non entiers. On retrouvera cette fonction Gamma sur la 11C et la 15C.
Pour l'implémentation il faudrait vérifier l'algorithme dans les listings VASM de la 41.
Eh bien, j'ai la mémoire qui flanche sacrément... :(
C'est une déformation probablement due à ma possession de la 29C, pendant longtemps unique, qui ne possédait pas cette fonction, mais tout de même... Merci, zpalm.

En ce qui concerne l'algorithme CORDIC, voici une lecture agréable et intéressante : http://www.jacques-laporte.org/LeSecret ... ithmes.htm

Rien à voir, cependant, avec les factorielles, mais avec les logarithmes et autres fonctions transcendantes.
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é.
Tipoucet
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3805
Enregistré le : 10 janv. 2009 13:47

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par Tipoucet »

casuffitdeschanel a écrit : 04 févr. 2018 19:34 Il me semble que la meilleure facon est d'avoir tous les resultats precalcules dans une table en ROM, il suffit d'aller chercher le resultat a sa place sans rien calculer, je me demande si nos vieilles machines font ainsi?
Autant que j'ai pu voir, les temps de calculs sont toujours proportionnels à la valeur entrée, donc cela parle en faveur d'un calcul réellement effectué. Par ailleurs il est fréquent que le lancement de la factorielle d'une valeur manifestement trop grande (89 par ex) génère un long calcul parfaitement inutile puisqu'aboutissant sur une inévitable erreur de dépassement. Donc là aussi calcul car pourquoi mémoriser des résultats ne pouvant être affichés. Le microcode de calcul de factorielle est aussi sans doute plus simple à implémenter que celui des fonctions transcendantes, peut-être même plus simple que la racine carrée (?)

A +
Dominique
caloubugs
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 434
Enregistré le : 05 juin 2014 22:23
Localisation : Dans le Gâtinais avec les abeilles, près de Fontainebleau

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par caloubugs »

Marge a écrit : 05 févr. 2018 02:22
En ce qui concerne l'algorithme CORDIC, voici une lecture agréable et intéressante : http://www.jacques-laporte.org/LeSecret ... ithmes.htm
Excellent ce lien Marge ! Ca mériterait bien un article dans la gazette tiens pour faire découvrir cela :)
RetroGeek, mais pas que...
HP : 15C, 41CV, 48GX, 71B, 75C Canon X-07 Sharp PC 1403H, PC1500A, PC1600, PC-G850V Texas : CC40, 66, 74, 95, 92 Casio : PB-700, PB-1000, Z-1GR Psion 5mx, mais pas que...
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par Ben »

caloubugs a écrit : 05 févr. 2018 14:35
Marge a écrit : 05 févr. 2018 02:22
En ce qui concerne l'algorithme CORDIC, voici une lecture agréable et intéressante : http://www.jacques-laporte.org/LeSecret ... ithmes.htm
Excellent ce lien Marge ! Ca mériterait bien un article dans la gazette tiens pour faire découvrir cela :)
Ah oui, ça pourrait être bien, un article simple à comprendre avec des exemples :-)
Avatar du membre
Xerxes
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 292
Enregistré le : 02 avr. 2007 13:41
Localisation : Allemagne
Contact :

Re: Misez P'tit, Optimisez - N°32 (factorielle)

Message par Xerxes »

Marge a écrit : 02 févr. 2018 23:59 I wonder... 3-steps, well, seems impossible to me... :wink:
It's possible on the FX-180P but somewhat awkward to use:

Code : Tout sélectionner

01  Kin*1
02  =
03  x>0
Usage example: 69 - - 1 Kin1 x<->y P1 Kout1
Répondre

Retourner vers « Tous les Pockets »