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
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 »

La 27S n'est pas une financière, c'est une scientifique généraliste (algébrique, non-RPN) avec des fonctions statistiques et financières (TVM). Elle a aussi une horloge intégrée comme la 17B/II, une chose qui manque sur la 42S.
Elle était vendue sous l’appellation "Scientific Calculator for the Technical Manager".
Tipoucet
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3787
Enregistré le : 10 janv. 2009 13:47

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

Message par Tipoucet »

Très intéressant ce fil, merci Marge pour le panorama des HP LED, merci C.RET pour l'explication sur NOP (mais comment sais tu tout ça ? 8O ), merci zpalm pour le programme commenté sur les 27S et copines. Je n'ai jamais entré de programme sur ma 17B à cause de cette philosophie de mise en equation d'un programme. Ça me parait peu naturel et illisible comme procédé de programmation. D'où l'intérêt de cet exemple que je vais étudier pour donner à manger, ne serait-ce qu'une fois à ma 17B :D .

Perso je n'apprécie plus que les protocoles de programmation naturels et simples, lisibles facilement pour être compris d'une seule lecture après plusieurs mois (et cela inclut les langages machines des LED, mais exclut le RPL, la HP-38, les anciennes machines à code invisible, les HP-17B ...). C'est aussi pourquoi je ne cherche plus à optimiser un programme, car je le préfère redondant et compréhensible, que ramassé, exploitant les astuces intimes de la machine et finalement illisible par la suite. Mais il est vrai que je ne suis qu'un programmeur très amateur, voire grossier, enthousiasmé davantage par le côté utile d'un programme que pour l'aspect ludique de l'exercice ...

merci a+ :wink:
Dominique
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 »

Tipoucet a écrit :C'est aussi pourquoi je ne cherche plus à optimiser un programme, car je le préfère redondant et compréhensible, que ramassé, exploitant les astuces intimes de la machine et finalement illisible par la suite. Mais il est vrai que je ne suis qu'un programmeur très amateur, voire grossier, enthousiasmé davantage par le côté utile d'un programme que pour l'aspect ludique de l'exercice ...
Je crois qu'on doit être un certain nombre à être d'accord avec toi : dans la vie de tous les jours, je programme sur ma 15c sans trop optimiser et sans trop me compliquer la vie et la lisibilité reste la priorité.

Pour moi, tout l'intérêt des MPO est de "dégourdir les jambes" de nos vieilles machines, de plus, il n'y a pas vraiment de compétition : chacun choisit la bécane qui lui convient (ou plusieurs machines comme Marge ! :wink: ) et optimise son programme comme il l'entend. Il est toujours amusant de voir un intervenant poster une version jugée définitive, et le lendemain le même re-poster une version améliorée !

Sinon, les astuces de programmation que l'on découvre au fil des différentes optimisations sont très éducatives à mon sens : autant certaines sont un frein à la lisibilité, autant d'autres sont lisibles et permettent de se faire le petit plaisir d'avoir un programme plus esthétique quand on programme pour soi.

Pour finir, ces fils MPO permettent, grâce aux infos de certains intervenants, de faire des découvertes sur des machines qu'on ne maîtrise pas forcément à fond : pour citer quelques exemples de ce fil, la programmation d'antiquités comme la 65, les évolutions d'architecture interne, l'utilisation astucieuse du Solver des HP récentes.
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 »

Moi, je suis d'accord avec tout le monde :D

Autant la plupart de mes programmes sont de gros pâtés avec de gros morceaux de gras dedans, je me réserve toujours un défi, un PGM plus difficile et motivant, pour l'exploit en particulier : en ce moment - et depuis quelques mois -, c'est calculer PI avec le maximum de décimales sur HP-19c. Je sais qu'il existe un PGM tout fait sur le HPM, mais je préfère m'exercer moi-même, l'exercice tient du numéro d'équilibriste, mais c'est là que des astuces du type de LOG pour remplacer 1 par 0 en x et placer 1 en Last x (Merci Zpalm !) sauvent la vie du programmeur (ou du moins quelques heures d'énervement). Je vous tiendrai au courant, naturellement, du résultat final que j'espère assez proche . :mrgreen: :D
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 »

badaze a écrit : 24 mai 2012 13:28Bravo.
Je me suis donc inspiré de la version proposée par zpalm pour essayer ce MPO sur une Ti-58c. Le code ressemble à celui de la Ti-57, mais avec cependant de petites différences dans les adressages. Ce qui fait qu'il y a quelques pas de plus, mais aussi parfois quelques uns de gagnés, en particulier avec l'adressage direct des instructions:

Code : Tout sélectionner

000 42 00        STO 00          Le registre R0 sera notre compteur
002 69 10        OP 10           OP 10 est en réalité la fonction SIGN         
004 42 01        STO 01          Le registre R1 sera notre accumulateur
006 00            0              Initialisation.
007 44 01        SUM 01          Accumule R1 = R1 + x  c'est à dire que R1 contient f"=f'+f    
009 48 01        Exc 01          Echange  R1 : x   ce qui fait que f" est  à l'affichage  
011 97 00 00 07  Dsz 00 007      Décrémente R0 et saut vers 007 sauf si R0 est zéro
015 91           R/S             Affiche le résultat.
016 81           RST             (instruction optionnelle)
En fait , en traçant pas à pas l'algorithme proposé initialement par zpalm, je me suis rendu compte qu'il n'y avait besoin que d'un seul registre puisque le registre d'affichage est mis à contribution.

L'instruction Exc revient à faire x:t mais entre le registre d'affichage x et n'importe quel registre.
L'instruction SIGN sert uniquement à s'assurer que F(0)=0, car pour n=0 la somme est faite une fois (comme pour n=1), il faut donc initialiser R1 à 0 lorsque n=0 et à 1 pour tout autre valeur positive.

RST 0 R/S affiche 0.
1 R/S affiche 1.
2 R/S affiche 1.
9 R/S affiche 34.
10 R/S affiche 55.
34 R/S affiche 5702887.
49 R/S affiche 7778742049. en environ 27" c'est loin d'être un bolide de l'espace (comme d'autre), mais elle court encore assez bien malgré ses 45 ans !

En fin de calcul, R0 contient 0 et R1 le terme précèdent de la suite f(n-1).
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
badaze
Fonctionne à 14400 bauds
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°16 (Fibonacci)

Message par badaze »

Sur TI 57 LED
15 pas

Code : Tout sélectionner

STO 0
Dsz
Ct
1
STO 2
Lbl 0
RCL 7
+
RCL 2
STO 7
=
STO 2
Dsz
GTO 0
R/S
Modifié en dernier par badaze le 01 mars 2022 22:47, modifié 1 fois.
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
badaze
Fonctionne à 14400 bauds
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°16 (Fibonacci)

Message par badaze »

Sur TI 57 LED
14 pas

Code : Tout sélectionner

STO 0
Dsz
Ct
1
Lbl 0
STO 2
RCL 7
+
RCL 2
STO 7
=
Dsz
GTO 0
R/S
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 : 2919
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

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

Message par zpalm »

badaze a écrit : 01 mars 2022 22:46 Sur TI 57 LED
14 pas
11 pas sur TI 57 LED:

Code : Tout sélectionner

STO 0
C.t
Dsz
1
Lbl 0
+
x<>t
=
Dsz
GTO 0
R/S
Déjà 10 ans pour ce MPO ! Du coup j’ai revisité mon code pour la hp 42s et j’ai trouvé de quoi gagner 2 pas et 1 octet:

Code : Tout sélectionner

HP-42S
00 { 21-Byte Prgm}
01  LBL"FIB#"
02  X=0?             * cas particulier F(0) => on retourne 0
03  RTN
04  0                * x:0, y:N qui va servir de compteur de boucles
05  SIGN             * x:1, y:N, l:0
06  LBL 00           
07  RCL+ ST L        * x:F(n+1)=F(n)+F(n-1), y: compteur de boucle, l:F(n)
08  DSE ST Y         * on décrémente y et on teste si on est arrivé à 0
09  GTO 00           
10  END              * après N boucles on sort
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

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

Message par Schraf »

Quelle coïncidence, vous reparlez de ce MPO 10 ans après et j'étais justement en train de programmer hier la suite de Fibonacci en assembleur 6502 ! 8)

En assembleur
En assembleur
fibo.png (97.29 Kio) Vu 3683 fois
Avatar du membre
badaze
Fonctionne à 14400 bauds
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°16 (Fibonacci)

Message par badaze »

Vous êtes de grands malades !
:D
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
phm
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1361
Enregistré le : 08 avr. 2016 18:36
Localisation : Est Parisien

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

Message par phm »

En assembleur ...
Un vrai défi
6502 sur Apple II ?
En 8080 ou Z80 cela serai plus mon truc. :D
HEWLETT-PACKARD : The best
CANON
X-07 X-730 X-711 XR-100 XM-101 XP-110F XP-120F XP-130F XP-140

AMSTRAD CPC-464 CPC-6128 ATARI STF DAI Indata
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

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

Message par Schraf »

Voici une version qui fonctionne sur une Ti-83+ (A compiler sur https://clrhome.org/asm/) en assembleur z80

Démonstration en vidéo

Code : Tout sélectionner

#include    "ti83plus.inc"
#define     progStart   $9D95
.org        progStart-2
.db         $BB,$6D
    bcall(_ClrLCDFull)	; routine qui efface écran
    ld de,$1		; DE = 1
    push de
    pop hl		; HL = DE
    ld b,$10		; B = 16 termes
loop: 
    push hl		; on sauve HL et DE car routines _dispHL et _newLine les détruisent
    push de
    bcall(_dispHL)
    bcall(_newLine)
    pop de		; récupération DE et HL
    pop hl
    add hl,de		; HL = HL + DE
    ex de,hl		; Echange HL et DE
    djnz loop
    ret
16 termes
16 termes
ti83.png (4.01 Kio) Vu 3652 fois
Code à taper à la main (Mettre comme nom du programme = A) et à lancer par Asm(PrgmA

Code : Tout sélectionner

AsmPrgm110100D5E10610E5D5EF0745EF2E45D1E119EB10F2C9
Si vous voulez avoir une version compilée, faire :

Code : Tout sélectionner

AsmComp(PrgmA,PrgmF
Vous pouvez alors supprimer le programme A et lancer le programme F par Asm(PrgmF
Modifié en dernier par Schraf le 03 mars 2022 09:48, modifié 2 fois.
Avatar du membre
badaze
Fonctionne à 14400 bauds
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°16 (Fibonacci)

Message par badaze »

zpalm a écrit : 01 mars 2022 23:46
11 pas sur TI 57 LED:
En 10 pas.

Code : Tout sélectionner

STO 0
C.t
1
Lbl 0
Inv Dsz
R/S
+
x<>t
=
GTO 0
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 : 2919
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

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

Message par zpalm »

badaze a écrit : 02 mars 2022 17:47 En 10 pas.
:) Comme quoi l'adage "cent fois sur le métier remettez votre ouvrage" semble avoir été écrit pour les MPOs
Avatar du membre
badaze
Fonctionne à 14400 bauds
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°16 (Fibonacci)

Message par badaze »

zpalm a écrit : 02 mars 2022 18:30
badaze a écrit : 02 mars 2022 17:47 En 10 pas.
:) Comme quoi l'adage "cent fois sur le métier remettez votre ouvrage" semble avoir été écrit pour les MPOs
Les idées des autres nous enrichissent et nous permettent de progresser.
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.
Répondre

Retourner vers « Tous les Pockets »