Misez p'tit, Optimisez - N°16 (Fibonacci)

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
Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1602
Enregistré le : 27 oct. 2010 20:46

Re: Misez p'tit, Optimisez - N°16 (Fibonacci)

Message par Gilles59 »

Sur 50G, il y a aussi une fonction nop (en minuscule).

Voilà ce qu'en dit le AUR (Advanced Reference manuel) :

nop

Description: This function is here for internal purposes and should not be used. Running this function does
nothing. Input/Output: None

J'ai essayé quand même et bien ... Elle ne fait effectivement rien du tout ;)
Elle prend environ 0,00277 sec à s'exécuter et c'est peut être la son seul intérêt (?) : j'en conclus que ce temps est la durée minimale pour appeler une fonction en User RPL
Casio FX-502P /602P / 603P / FX180P+ / FX4000P / TI57 / TI66 / TI74 Basicalc / TI95 Procalc / HP12C / HP15C LE / DM41L / HP 30B / HP39GII / HP 48SX USA / 49G / 49g+ / 50G / 50G NewRPL / HP Prime / Oric 1 / Amstrad CPC 6128+ CM14 et MM12 / Alice 32
Avatar du membre
Marge
Fonctionne à 14400 bauds
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°16 (Fibonacci)

Message par Marge »

oli a écrit :
Marge a écrit :
oli a écrit :
C.Ret a écrit :Dans un premier temps, en lisant un peu vite ce dernier code, je me suis demandé pourquoi il y avait des NOP !
Et puis j'ai réalisé en lisant les explication que comme il n'y avait ni label, ni moyen d'éditer le code saisi, il fallait bien évidemment prévoir l'adresse des sauts.
Comme mon expérience en programmation se limite aux 15c, 28s et 48sx, je me suis tout d'abord aussi demandé quelle était l'utilité des NOP.
Merci à Marge pour ses programmes et à C.Ret pour ses explications.
Si je comprends bien, la fonction NOP était présente depuis la 65 jusqu'à la 33c et dès la 34c la fonction LBL est apparue ?
La fonction LBL est déjà présente sur l'HP-65, continue sur l'HP-67, l'HP-29c et l'HP-41c (par ordre d'apparition à l'écran, si je ne me trompe pas). Elle est encore sur la 34c (apparue après la 41), mais n'apparaît sur aucun des petits modèles programmables, tels que l'HP-25, l'HP-33c, ou encore la 12 (comme on dirait : une Renault 12).
Merci, j'avais déjà corrigé pour la 67.
ça veut dire que certaines calculatrices avaient la fonction NOP et LBL et que par la suite, la fonction NOP a été abandonnée ?
Oui. La fontion LBL est évidemment très pratique en programmation, notamment de sous-programmes, alors que la fonction NOP était une sorte de fonction "par défaut" ; par exemple sur l'HP-65, c'est cette fonction qui emplit tous les pas de programmes lorsque rien n'a été programmé (ce rôle d'emplissage sera ensuite dévolu à la fonction GTO OO (HP-25) ou encore R/S (HP-29c). J'ai aussi entendu parler ("lu" serait plus juste) de certains cas de transferts conditionnels où NOP peut être utile, notamment pour créer d'autres tests, mais je serais bien incapable de faire cela ici, là, tout d'suite - mais si on demandait à C.ret ou Zpalm... :wink: )

Comme on l'a vu, la fonction NOP est requise pour "adresser" des portions de programme éloignées lorsqu'on programme en direct. Je ne connais pas bien la série Voyager, mais sur la 12 il n'y a ni LBL ni NOP, et c'est R/S qui emplit la mémoire programme.
Avatar du membre
Woodstock
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1969
Enregistré le : 17 mai 2008 11:19
Localisation : Au fin fond du Santerre ...

Re: Misez p'tit, Optimisez - N°16 (Fibonacci)

Message par Woodstock »

Marge a écrit :Comme on l'a vu, la fonction NOP est requise pour "adresser" des portions de programme éloignées lorsqu'on programme en direct. Je ne connais pas bien la série Voyager, mais sur la 12 il n'y a ni LBL ni NOP, et c'est R/S qui emplit la mémoire programme.
Sur ma 12C (première version), je n'ai que des g GTO 00 (43.33 00) après un f CLEAR PRGM. Mais effectivement ni NOP ni LBL (adressage par n° de pas impératif).
I'm the operator
Of my pocket calculator
I am adding
And substracting...
(Kraftwerk, Computer World, 1981)
Avatar du membre
Marge
Fonctionne à 14400 bauds
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°16 (Fibonacci)

Message par Marge »

Woodstock a écrit :
Marge a écrit :Comme on l'a vu, la fonction NOP est requise pour "adresser" des portions de programme éloignées lorsqu'on programme en direct. Je ne connais pas bien la série Voyager, mais sur la 12 il n'y a ni LBL ni NOP, et c'est R/S qui emplit la mémoire programme.
Sur ma 12C (première version), je n'ai que des g GTO 00 (43.33 00) après un f CLEAR PRGM. Mais effectivement ni NOP ni LBL (adressage par n° de pas impératif).
Oui, au temps pour moi, j'avais laissé traîner le dernier pgm avant de vérifier. J'ai une des dernières versions
et je confirme ce que tu écris. :oops:
Avatar du membre
Woodstock
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1969
Enregistré le : 17 mai 2008 11:19
Localisation : Au fin fond du Santerre ...

Re: Misez p'tit, Optimisez - N°16 (Fibonacci)

Message par Woodstock »

Désolé de n'avoir pu résister au plaisir de pinailler :oops:

Woodstock, coupeur d'octets en quatre... parce qu'en deux, c'est déjà fait : ça s'appelle HP-71B 8)
I'm the operator
Of my pocket calculator
I am adding
And substracting...
(Kraftwerk, Computer World, 1981)
Avatar du membre
Marge
Fonctionne à 14400 bauds
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°16 (Fibonacci)

Message par Marge »

Résultat pour l'HP-65 :

La programmation de cette merveille n'est pas aisée lorsqu'on est habitué au maniement des HP qui ont suivi. J'ai eu beaucoup de difficulté à faire fonctionner le programme avant d'intelligemment me renseigner auprès du HPM sur quelques concepts fondamentaux à connaître avant de se lancer. :mrgreen:

Il n'y aucun pas de programme à l'affichage, que ce soit en mode programme ou en mode lecture. L'édition ne connaît pas le BST (Back step), il faut donc repasser en mode Lecture, faire RTN pour retourner au pas 0, puis repasser en mode Programme et faire SST pour redescendre au pas concerné par la correction (*).

Mais la réelle difficulté vient des instructions qui peuvent prendre plusieurs pas de programme. Je vous mets le code, j'ajoute les numéros de pas et les instructions en clair en dernière colonne :

Avant toute entrée d'instruction, il est prudent d'effectuer un f - CLEAR PRGM pour éviter toute confusion entre les fonctions préprogrammées de la première ligne et les portions de programmes étiquetées par la suite dans le programme.

Code : Tout sélectionner

N°       CODE    INSTRUCTION
00         00        0
01      35 23        x=y
02         84        R/S   (NOP serait pertinent !)
03         24        RTN
04      35 07        x<->y (fonction atteinte via "g")
05         03        3
06      35 22        x<=y
07         22        GTO
08         11        A
09         01        1
10         84        R/S
11         23        LBL
12         11        A
13      35 07        x<->y
14         02        2
15         51        -
16      33 08        STO 8 (Registre de bouclage)
17         01        1
18         41        ENTER
19         23        LBL
20         12        B
21         61        +
22      35 00        Lst x
23      35 07        x<->y
24         35        g
25         83        DSZ (décrémente le registre 8 de l'unité)
26         22        GTO
27         12        B
28         84        R/S
Le programme en lui-même n'est toujours pas brillant, mais l'intéressant n'est pas là. L'HP-65 a de beaux atouts : par exemple, le registre 8 sert de compteur de boucle, ce qui facilite grandement la conception du programme.
En revanche, les tests nécessitent toujours au total 4 pas (3 pas pour toutes les autres HP) en raison de la place requise par certaines instructions, dont celles responsables des branchements (LBL B prend deux pas). C'est évidemment la raison pour laquelle j'ai passé du temps à faire fonctionner ce calcul. C'est aussi la raison de la présence de la fonction sans utilité NOP.

Pressant, enfin ! 49, puis RTN, et R/S, le résultat est tombé : 9 s. !!!

7.778742049 09 en 9 secondes !

Le premier engin calculateur programmable(**) portable à avoir été dans l'espace est un bolide ! 8O

Je n'en reviens toujours pas.



(*) Je ne me suis pas aventuré à tester le GTO .05

(**) J'ai lu hier que la 35 serait allée dans l'espace, d'où ma modification.
Modifié en dernier par Marge le 30 mai 2012 12:49, modifié 2 fois.
Avatar du membre
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3626
Enregistré le : 06 sept. 2011 14:57
Localisation : Normandie

Re: Misez p'tit, Optimisez - N°16 (Fibonacci)

Message par Hobiecat »

Marge a écrit :Pressant, enfin ! 49, puis RTN, et R/S, le résultat est tombé : 9 s. !!!

7.778742049 09 en 9 secondes !

Le premier engin calculateur portable à avoir été dans l'espace est un bolide ! 8O
Effectivement, c'est impressionant !!! Dommage qu'on ne puisse plus questionner les concepteurs de ces machines, qui auraient sans doute des choses à nous apprendre.

En tout cas, merci Marge pour ces efforts instructifs à programmer les vieilles bécanes : pour essayer de temps en temps la 67, je sais que l'exercice est douloureux quand on perd les outils d'édition ou même l'accès direct au listing programme (sans parler non plus du codage... Je lis à peu près le 15c dans le texte, mais les autres, il faut compter les touches ! :mrgreen: )
Avatar du membre
oli
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 311
Enregistré le : 30 mars 2012 14:13
Localisation : CH

Re: Misez p'tit, Optimisez - N°16 (Fibonacci)

Message par oli »

Marge a écrit :Résultat pour l'HP-65 :

La programmation de cette merveille n'est pas aisée lorsqu'on est habitué au maniement des HP qui ont suivi. J'ai eu beaucoup de difficulté à faire fonctionner le programme avant d'intelligemment me renseigner auprès du HPM sur quelques concepts fondamentaux à connaître avant de se lancer. :mrgreen:

Il n'y aucun pas de programme à l'affichage, que ce soit en mode programme ou en mode lecture. L'édition ne connaît pas le BST (Back step), il faut donc repasser en mode Lecture, faire RTN pour retourner au pas 0, puis repasser en mode Programme et faire SST pour redescendre au pas concerné par la correction (*).

Mais la réelle difficulté vient des instructions qui peuvent prendre plusieurs pas de programme. Je vous mets le code, j'ajoute les numéros de pas et les instructions en clair en dernière colonne :

Le programme en lui-même n'est toujours pas brillant, mais l'intéressant n'est pas là. L'HP-65 a de beaux atouts : par exemple, le registre 8 sert de compteur de boucle, ce qui facilite grandement la conception du programme.
En revanche, les tests nécessitent toujours au total 4 pas (3 pas pour toutes les autres HP) en raison de la place requise par certaines instructions, dont celles responsables des branchements (LBL B prend deux pas). C'est évidemment la raison pour laquelle j'ai passé du temps à faire fonctionner ce calcul. C'est aussi la raison de la présence de la fonction sans utilité NOP.

Pressant, enfin ! 49, puis RTN, et R/S, le résultat est tombé : 9 s. !!!

7.778742049 09 en 9 secondes !

Le premier engin calculateur portable à avoir été dans l'espace est un bolide ! 8O

Je n'en reviens toujours pas.



(*) je ne me suis pas aventuré à tester le GTO .05
Merci pour tous ces exemples de programmation de ces "grand-mères", c'est instructif.
Je suis un peu déçu de la lenteur de la 15c quand je vois qu'il y a presque 20 sec de différence avec la 65.
Enfin, j'ai quand même appris qu'il existait des fonctions sans utilité (NOP) :wink:
Que les anciennes hp (RPN) avant qu'elles ne soient Made in China !!!
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
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°16 (Fibonacci)

Message par C.Ret »

oli a écrit :ça veut dire que certaines calculatrices avaient la fonction NOP et LBL et que par la suite, la fonction NOP a été abandonnée ?

Oui, c'est tout à fait cela. Avec la subtilité cependant que ce n'est pas l'apparition des label (LBL xx) qui a fait disparaitre l'instruction NOP, mais plutôt l'apparition de l'insertion automatique des instructions et les capacités d'édition du programme. J'entend par là la possibilité de supprimer une instruction en tout point du programme à l'aide de l'instruction DEL (souvent la flèche <- ) qui supprime l'instruction affichée, soit par mouvement pas à pas (SST et BST), soit avec l'instruction GTO.xxx

Pour quelque peu résumé, il faut rappeler:

Que sur les calculatrices uniquement à affichage numérique, les instructions sont indiquées par un code à deux chiffres donnant le "code touche" de la fonction. Les codes numériques des programmes sont donc spécifiques à disposition des claviers et fonction de chaque modèle.

Que les premières calculatrice programmable ne fusionnent pas les pas de programme, ainsi sur l'HP-65 les instructions obtenues avec des touches préfixes sont codés avec deux (ou plusieurs) codes successifs. De toute façon l'HP-65 n'affiche pas le numéro des pas de programme, uniquement le "code touche".

Que la fusion des codes touche des instructions composées n'apparait qu'avec l'HP-25; ainsi les fonction obtenue avec une touche préfixe (f LN) ou les fonctions composé (STO + 0) sont affichées avec chaque code, mais ne comptent que pour une seule instruction.
D'ailleurs à cette époque apparait l'affichage systématique du n° d'instruction lors de la saisie du programme.

Que ce n'est qu'à partir de l'HP-41C que les instructions seront indiquées en clair grâce à l'affichage alphanumérique. Que les Voyagers (HP10/11/15/12/16/C) sont à ce titre au grand recul car sur ces modèles et du fait de la limitation de l'affichage, les "codes touches" réapparaissent.

Que l'instruction NOP est surtout nécessaire lorsque les possibilités d'édition du programme sont limités, mais aussi en partie lorsqu'il n'y a pas de "labels", c'est à dire d'adressage symbolique.

Que la touche SST (Single STep) est apparue dès la première programmable. Cette commande n'est pas programmable. Elle permet lors de l'édition d'un programme d'avancer d'un pas et en mode calcul d'exécuter pas à pas les instructions d'un programme.

Que la touche BST (Back STep) n'apparaitra que sur l'HP-55 et elle est bien pratique pour éditer les programmes car combinée avec SST, elle permet de "naviguer à volonté" dans un programme sans le modifier. En mode exécution, elle recule d'un pas de programme, mais n'exécute aucune instruction.

Que lors de la programmation, une différence essentielle existe entre les premières programmables (et les suivante). Cette différence provient de la façon dont les instructions sont introduites lors de la saisie d'un programme.

Sur les HP-65/55, il n'y a pas d'insertion. Les instructions tapées lors de la saisie remplacent les codes précédemment mémorisés. Il n'y a pas de moyen d'insérer les instructions. En cas d'erreur, il faut revenir sur le lieu de l'oubli et retaper tout le programme jusqu'à la fin de celui-ci.

L'instruction NOP prend donc tout son sens car elle permet en remplaçant des instructions devenues inutiles ou en permettant de laisser des "blancs" dans le programme afin de disposer d'un peu de place pour des modifications ultérieures ou simplement pour "effacer" un instruction erronée.

On comprend que sur ce type de machine, il n'y a pas non-plus d'adressage symbolique. Comme il n'y a aps d'insertion des instructions, le début de chaque partie d'un programme ne "glisse" pas en cas de modification de celui-ci. L'instruction de saut GTO est donc directe, on donne directement l'adresse de l'instruction où il faut continuer l'exécution du programme.
L'instruction NOP prend tout son sens, on peut insérer les "blancs" nécessaires pour faire commencer un sous-programme à une adresse prédéfinie (comme le fait Marge est commençant les différentes partie de son code à des numéro d'instruction multiple de dix (20, 30, etc...) ce qui lui laisse un peu de marge de manoeuvre pour ajuster les différents blocks de code.

Ce premier type de programmation est cohérent, même s'il devient vite fastidieux de modifier un programme ou de le corriger. C'est ainsi que fonctionne les HP65, 55, 10C et 12C, avec la nuance que pour corser le tout l'HP-65 n'a ni l'affichage du numéro d'instruction, ni de touche BST (il faut donc , en cas de modification, sortir du mode 'pgrm' remettre à zéro le pointeur Pgrm-Counter et avancer (en aveugle) avec SST jusqu'au lieu à modifier !).

Que par la suite, une évolution importante apparait : l'insertion des instructions. Avec les HP suivante 65/67/15/41, ... les instructions saisies au clavier lors de l'édition d'un programme sont insérées dans celui-ci sans effacer les instructions suivantes (dans la limite de la mémoire programme). Ce qui permet d'ajouter des instructions sans avoir à retaper toute la suite d'un code !
Il y a apparition d'une instruction d'édition du programme (DEL ou <-- ou BSP ) qui permet de supprimer l'instruction affichée.

Ce qui fait qu'avec l'affichage du numéro d'instruction, des codes fusionnés et des commande SST et BST, il devient bien plus facile d'éditer et modifier un programme et donc de le mettre au point 'dynamiquement'.

Par contre, il y a un inconvénient majeur: l'insertion/suppression automatique ou facile des instructions rend les adresses du début des sous-parties d'un programme "glissantes".

Il faut alors veiller à ce que les adresses directement utilisées ne change pas en ajoutant ou supprimant des NOP.

Très vite, les modèles utilisant l'insertion des instruction ont donc abandonné l'adressage directe (ex. GTO 013 ) au profit d'adressage symbolique en utilisant le mot clef LBL (ex LBL +, LBL 0, LBL *, puis alpha numérique LBL A, LBL "Patate, ...). L'instruction de saut GTO (et son homologue GSB) évolue. Cela permet au programmeur de ne plus tenir compte du numéro d'instruction et la taille des différentes parties d'un code peut évoluée à loisir. Ce qui facilite la programmation et surtout les modifications et mises au point.

Mais cela a un coût en tant d'exécution, car à chaque saut, la calculatrice doit chercher le label symbolique. Il y a d'ailleurs là sujet à subtilité entre les modèle, certaines HP recherche toujours depuis le début de la zone de programme, d'autre à partir de la position courante du PC avec retour au début de la mémoire programme si la fin est atteinte. Il y a donc, en cas de labels redondants des comportements diffèrent; les labels en double étant soit systématiquement invisible (l'exécution reprend systématiquement sur la première apparition - HP67/97) soit dépend de la zone d'appel (l'exécution reprenant sur le 'prochain' label indiqué).

Dans la plupart de cas, cette 'recherche du label symbolique' ralenti l'exécution car il faut le temps à la calculatrice de parcourir sa mémoire à la recherche de la cible.
C'est ce qui explique en partie la relative efficacité des temps de calcul des HP65/29/33 par rapport à des modèles plus récents; l'adressage direct par numéro d'instruction n'a aucun temps mort. Et paradoxalement, plus la mémoire programme est étendue, plus la les sauts symboliques seront potentiellement longs (il est même possible de faire des code très long en organisant mal les différents blocks de label).

Pour palier en partie à ce manque d'efficacité, notons que certaines machines RPN proposent conjointement le saut direct et le saut symbolique et que d'autre propose saut symbolique et saut relatif. En utilisant une adresse négative (GTO -07 signifie alors revenir de 7 pas en arrière). Notons que pour des raisons de simplification, les possibilités de sauts relatifs sont implémenté à partir des instructions de sauts indexé ou indirect (GTO i avec i contenant une valeur négative ou GTO (i) avec i pointant vers un registre contenant une valeur négative).

Enfin, pour éviter le désagrément des sauts symboliques lents, l'HP-41 introduit une caractéristique fort intéressante (qui sera utilisée sur les suivantes 42/32), l'instruction de saut symbolique GTO (et homologue GSB) réserve dans la mémoire programme quelques bytes afin de mémoriser l'adresse directe du symbole. Ainsi, la "longue" recherche à travers toute la mémoire du calculateur ne se fait qu'une seule fois. De façon transparente pour l'utilisateur, l'adresse directe est mémorisée et sera utiliser lors de la prochaine exécution de cette commande de saut. Ce qui permet de gagner un temps précieux, surtout pour les GTO situés dans des boucles de calculs.
En contre partie, le calculateur remet à zéro ces adresses directes mémorisées chaque fois que les programmes sont édités ou la mémoire du calculateur restructurée. C'est l'une des raisons, avec d'autres astuces d'optimisation, comme l'ajout systématique de bytes tampon pour rendre plus fluide le parcours et l'insertion des instructions, de l'apparition de temps en temps et à certaines opération du délai nécessaire au 'Packing...'. C'est à dire à la restructuration de la mémoire qui compile et retire les bytes insérés inutilement lors de la saisie et devenus inutiles pour l'optimisation de l'exécution ou de l'utilisation de la mémoire.
Quand on y réfléchit, il y a une logique dans l’évolution de la gamme RPN des calculatrice HP et c’est ce qui rend l’excercice auquel s’est prêté Marge fort interressant.

En effet, en comparant ces programmes et on étudiant les performance de ces machines ancienne , on se rend compte des évolutions de la techniques, mais il faut effectivement nuancé, les machine plus sophistiquées sont peut-être plus facile (plus directement ou intuitivement) à utiliser et plus puissante (plus de pas de programme, plus de mémoire) , mais cela se fait malgré tout parfois en détriment de la « performance pure ».


Un petit tableau qui tente de résumertout cela :

Code : Tout sélectionner

Years   Calculator   PC    KeyCode Instr.  SST    BST      DEL     Nop GTO.    GTO/GSB jump

1972-75 HP-35       ----------------------------------------------------------------------------------------- no prgm
1974-77 HP-65        No    Partial replace Yes    no       yes     yes no      symbolic
1975-77 HP-55        yes   no      replace Yes    yes      no      yes no      direct
1975-78 HP-21       ----------------------------------------------------------------------------------------- no prgm
1975-78 HP-25/HP-25C yes   full    replace yes    yes      no      yes no      direct
1976-84 HP-67/97     yes   full    INSERT. yes    yes      yes     no  yes     symb/indir
1977-79 HP-19C/29C   yes   full    INSERT. yes    yes      yes     no  yes     symb/indir/relative
-   -   HP-95        yes+a full+a  INSERT. yes    yes      yes     non yes     symb/indrr/rel/partition
1978-83 HP-33E       yes   full    replace yes    yes      no      yes yes     direct
1979-83 HP-33C       yes   full    replace yes    yes      no      yes yes     direct
1979-83 HP-34C       yes   full    INSERT. yes    yes      yes     no  yes     symb/indir/relative
1979-90 HP-41C/CV/CX yes   ALPHA   INSERT. yes    yes      yes(<-) yes yes     symb/indrr/relative/partition/module
1981-89 HP-11C       yes   full    INSERT. yes    yes      yes     no  yes     symb/indir
1982-89 HP-15C       yes   full    INSERT. yes    yes      yes     no  yes CHS symb/indir/relative?
1982-84 HP-10C       yes   full    replace yes    yes      no      no  yes     direct
1987-92 HP-28C/S    ----------------------------------------------------------------------------------------- RPL prgm        
1988-91 HP-32S       yes+a ALPHA   INSERT. yes(dn) yes(up) yes(<-) no  yes     symb/indir/relative
1988-95 P-42S        yes+a ALPHA   INSERT. yes(dn) yes(up) yes(<-) yes yes     symb/indir/relative/partition
1990-93 HP-48X      ----------------------------------------------------------------------------------------- RPL prgm


yes+a :  Program Counter also show partition or label A, B, C, D or E

Partial: a few instruction keycode are merge only. Main exemple is GTO 03 which is show as -03
full:   keycode full merged : 003 STO + 03  display as one step instruction    03- 23 42 03
full+a:  mainly keycode display except for same specific instruction (using 7-segment digit display only 01234556789AbCdEFGHIJLPSTUY) and partition label (ex. A001  LbL A )
ALPHA:  no more keycode, direct instruction display (alphanumeric display great feature)

replace: in program mode, the new keystroke replace the next instruction to the one actualy on display
INSERT.: in program mode, the new keystroke is insert before the next instruction to the one actualy on display

GTO. : allow immediate postionning in program without any change in program or excution of code.

symbolic : GOTO use labels 0 .. 9 or user kay A B C D E when available.
direct : GOTO use only program step (direct adressing)
indir: indirect adressing using specific register (I) or any register (i) 
relative: indrect adressing with negative value allow relative backward jump.
partition/module: specific jump instruction to access other memory partition or external module.
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.
Avatar du membre
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3626
Enregistré le : 06 sept. 2011 14:57
Localisation : Normandie

Re: Misez p'tit, Optimisez - N°16 (Fibonacci)

Message par Hobiecat »

Un grand merci C.Ret pour ces explications fort détaillées !
Effectivement, l'architecture interne des machines peut influer notablement sur la rapidité des machines, ce qui est constaté sur les essais de programmation de Marge.

Et la bizarrerie reste toujours les Voyagers qui, quoique de génération récente, restent excessivement lentes... on ne m'enlèvera pas de l'idée que cela résulte de choix "énergétiques".
Avatar du membre
Marge
Fonctionne à 14400 bauds
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°16 (Fibonacci)

Message par Marge »

Merci C.Ret, c'est très instructif.
Avatar du membre
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7141
Enregistré le : 31 janv. 2008 14:24
Localisation : Banlieue Paârisienne
Contact :

Re: Misez p'tit, Optimisez - N°16 (Fibonacci)

Message par gege »

Bonjour,

Je proteste energiquement !
SST *est* programmable, c'est.......... NOP ;-)

Dans la meme veine que ce qui avait ete fait lors de la recherche du nombre de Fibonacci "pan-digital", le programme suivant calcule F(n) exactement, mais avec une methode d'acceleration. Pour les petites valeurs de n on perd en performances, mais pour n grand le resultat est obtenu bien plus vite.
Pour Casio Graph 85 :

Code : Tout sélectionner

 ?->N:0->A:1->B
Int(ln N/ln 2)->M
N/2^M->N
For 1->I To M
2Frac N->N:(2A+B)B->C
If 1>N
Then A2+B2->A:C->B
Else (A+B)2+B2->B:C->A
IfEnd:Next:B 
G.E.
Avatar du membre
oli
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 311
Enregistré le : 30 mars 2012 14:13
Localisation : CH

Re: Misez p'tit, Optimisez - N°16 (Fibonacci)

Message par oli »

C.Ret a écrit :
oli a écrit :ça veut dire que certaines calculatrices avaient la fonction NOP et LBL et que par la suite, la fonction NOP a été abandonnée ?

Oui, c'est tout à fait cela. Avec la subtilité cependant que ce n'est pas l'apparition des label (LBL xx) qui a fait disparaitre l'instruction NOP, mais plutôt l'apparition de l'insertion automatique des instructions et les capacités d'édition du programme. J'entend par là la possibilité de supprimer une instruction en tout point du programme à l'aide de l'instruction DEL (souvent la flèche <- ) qui supprime l'instruction affichée, soit par mouvement pas à pas (SST et BST), soit avec l'instruction GTO.xxx..................
Merci C.Ret pour cette grande réponse à ma petite question. J'y vois effectivement plus clair et je comprends l'utilité d'une fonction qui n'a pas d'utilité :lol:
A l'époque, j'ai passé directement de la 35 à la 15c. J'ai donc manqué toutes ces pionnières de la programmation et j'ai débuté avec une calculatrice qui était déjà un peu plus souple d'emploi.
Que les anciennes hp (RPN) avant qu'elles ne soient Made in China !!!
Avatar du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2919
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: Misez p'tit, Optimisez - N°16 (Fibonacci)

Message par zpalm »

@Marge: Quelle belle collection de HP à LED ainsi mise à l'épreuve !

@C.Ret: Merci pour l'explication détaillée et pertinente de l'évolution du mode programme des calculatrices HP.

Pour compléter ce MPO N°16, voici une version pour des machines rarement citées ici: les HP 27S/17BII/19B et leur Solver avec l'utilisation des fonctions LET et GET (L et G) décrites dans le manuel "HP27S/HP19B Technical Applications".

Code : Tout sélectionner

IF(N=0:0:L(A:1)xL(B:0)+∑(I:1:N:1:0x(L(C:G(A)+G(B))+L(A:G(B))+L(B:G(C))))+G(B))=FIB
Après avoir entré cette équation dans le Solver, et l'avoir validée avec CALC, on obtient les softkeys: "N" et "FIB" à l'écran. Pour l'utiliser, par ex: 49 "N" "FIB" donne 7.778.742.049 en 5,7s sur HP 27S.

La valeur exacte maximale que l'on peut obtenir (12 chiffres) est F(59) = 956.722.026.041.

Explication (l'évaluation de la formule se fait de gauche de à droite):

Code : Tout sélectionner

IF(N=0:0:                                Pour 0 on retourne 0, sinon on va calculer F(N)

L(A:1)xL(B:0)                            Initialisation des variables internes A et B,
                                         L(A:1) retourne 1, L(B:0) retourne 0, le produit est nul

+∑(I:1:N:1:                              On utilise la fonction ∑ (somme) comme boucle, 
                                         I est le compteur de boucle de 1 à N avec un pas de 1

0x(L(C:G(A)+G(B))+L(A:G(B))+L(B:G(C))))  A chaque itération: C=A+B, A=B, B=C, le tout est multiplié  
                                         par 0 pour que la somme finale soit nulle. On utilise la 
                                         fonction  G() pour éviter que les variables internes A, B, C 
                                         apparaissent  dans le menu aux côtés de N et FIB 

+G(B))=FIB                               Ensuite on récupère la valeur finale de B qui additionnée 
                                         aux valeurs nulles des étapes précédentes est affectée à FIB
Avatar du membre
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3626
Enregistré le : 06 sept. 2011 14:57
Localisation : Normandie

Re: Misez p'tit, Optimisez - N°16 (Fibonacci)

Message par Hobiecat »

Intéressant ce dernier portage sur les "financières"... Je ne les pensais pas dotées de telles possibilités.
Répondre

Retourner vers « Tous les Pockets »