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 de l’utilisateur
badaze
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7462
Inscription : 12 févr. 2007 19:36
Localisation : Pas très loin de Lyon
Contact :

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

Message par badaze » 01 févr. 2018 23:05

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 de l’utilisateur
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2498
Inscription : 03 mai 2008 15:33
Localisation : Grenoble

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

Message par zpalm » 02 févr. 2018 00:48

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 de l’utilisateur
badaze
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7462
Inscription : 12 févr. 2007 19:36
Localisation : Pas très loin de Lyon
Contact :

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

Message par badaze » 02 févr. 2018 01: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:
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
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5593
Inscription : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

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

Message par Marge » 02 févr. 2018 01:37

badaze a écrit :
02 févr. 2018 01: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 !

« Boris », c'est juste Maurice enrhumé.

Avatar de l’utilisateur
Xerxes
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 291
Inscription : 02 avr. 2007 13:41
Localisation : Allemagne
Contact :

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

Message par Xerxes » 02 févr. 2018 23:10

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 de l’utilisateur
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5593
Inscription : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

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

Message par Marge » 03 févr. 2018 00:59

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 !

« Boris », c'est juste Maurice enrhumé.

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

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

Message par C.Ret » 03 févr. 2018 14:32

badaze a écrit :
02 févr. 2018 01: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 + CE-121 + CE-122. | VIC 20 Commodore 128D + Printer P-803 + SD2iec. | TI-57 LCD | HP-28S + HP82240A | TI-74 BasiCalc | HP-41C + (2 memory + stat + IR) | HP-15C | HP Prime Color Touchscreen Graphing Calculator| TI-92 II | CASIO fx-602p + FA-1 | HP-71B 64K+JPC-ROM+HPIL+card reader . Sommaire des M.P.O..

casuffitdeschanel
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 626
Inscription : 21 sept. 2009 21:56
Localisation : Metz

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

Message par casuffitdeschanel » 04 févr. 2018 20: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?

Avatar de l’utilisateur
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5593
Inscription : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

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

Message par Marge » 04 févr. 2018 23:36

casuffitdeschanel a écrit :
04 févr. 2018 20: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 !

« Boris », c'est juste Maurice enrhumé.

Avatar de l’utilisateur
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2498
Inscription : 03 mai 2008 15:33
Localisation : Grenoble

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

Message par zpalm » 05 févr. 2018 00: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.

Avatar de l’utilisateur
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5593
Inscription : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

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

Message par Marge » 05 févr. 2018 03:22

zpalm a écrit :
05 févr. 2018 00: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 !

« Boris », c'est juste Maurice enrhumé.

Tipoucet
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3767
Inscription : 10 janv. 2009 14:47

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

Message par Tipoucet » 05 févr. 2018 13:23

casuffitdeschanel a écrit :
04 févr. 2018 20: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 : 438
Inscription : 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 » 05 févr. 2018 15:35

Marge a écrit :
05 févr. 2018 03: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 : 1817
Inscription : 21 août 2016 19:04

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

Message par Ben » 05 févr. 2018 16:45

caloubugs a écrit :
05 févr. 2018 15:35
Marge a écrit :
05 févr. 2018 03: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 de l’utilisateur
Xerxes
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 291
Inscription : 02 avr. 2007 13:41
Localisation : Allemagne
Contact :

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

Message par Xerxes » 06 févr. 2018 16:11

Marge a écrit :
03 févr. 2018 00: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

Revenir vers « Tous les Pockets »