Misez p'tit, optimisez n°60 : Calculons Pi comme Viète

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
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°60 : Calculons Pi comme Viète

Message par C.Ret » 09 nov. 2014 20:14

Et oui, c'est ça qui est bien avec les M.P.O. ! Il y a toujours un défit à relever ! :)

Je me souviens plus, sur HP-28S, il n'y a pas moyen d'afficher l"erreur Overflow avec les fonctions ERRN et ERRM ??
Ou un SYSEVAL ?
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..

Avatar de l’utilisateur
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 4847
Inscription : 21 nov. 2012 14:03
Localisation : Ile de France

Re: Misez p'tit, optimisez n°60 : Calculons Pi comme Viète

Message par bernouilli92 » 09 nov. 2014 20:31

Je ne sais pas si DOERR existe sur hp28s. Sinon au pire, cela doit être faisable avec un SYSEVAL.
HP, Casio, Sharp, Psion, quelques TI et divers autres

Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1428
Inscription : 27 oct. 2010 20:46

Re: Calculons Pi comme Viète

Message par Gilles59 » 09 nov. 2014 21:25

Hobiecat a écrit :
Gilles59 a écrit :J'ai l'intuition qu'il va être difficile de faire mieux ...
Belle optimisation depuis le début ;D
L'expérience des MPO montre qu'il ne faut jamais dire jamais, même s'il est vrai que sur ces dernières versions, il semble ne plus y avoir grand'chose à gagner...
Tu as raison Hobbicat...

1 pas de moins
15 pas : (TI 57 LED) . Copié-collé de la version 602P optimisée

Code : Tout sélectionner

C.T
STO 0
2
LBL 1
*
2
SUM 7
/
RCL 7
SQRT
STO 7
DSZ
GTO 1
=
R/S
Usage RST 10 R/S

Donne 3.1415927 (meilleur résultat avec ce nombre de chiffre) en 14 boucles

EDIT : L'émulateur TI57 pour les HP48/49/50 est vraiment étonnant. J'ai essayé l'astuce parue dans l'OP n04 page 58, pour afficher quelques lettres avec la TI57 et bien çà marche ! Mon émulation 57 affiche bien FIASCO :D Il intégre bel et bien la ROM de la 57,je suis bluffé ... Juste dommage qu'on ne puisse pas exporter les programme avec les code TI ... Le même auteur a fait une émulation totale de la TI59 (processeur + ROM + modules externe :O )
Dernière édition par Gilles59 le 09 nov. 2014 22:42, édité 1 fois.
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+

Avatar de l’utilisateur
babaorhum
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 452
Inscription : 13 janv. 2013 20:44
Localisation : Marseille-est

Re: Misez p'tit, optimisez n°60 : Calculons Pi comme Viète

Message par babaorhum » 09 nov. 2014 22:24

En parlant d'émulateur, j'ai bricolé ma version pour HP-42s sur l'émulateur Free42s, version pocket PC (pratique pour tapoter quand il fait sombre un émulateur ...). Et je m’aperçois que la précision est meilleure qu'avec la HP-42s originale :
en recherchant les décimales non visibles, 5 par 5 pour ne pas me perdre, avec un :

Code : Tout sélectionner

LBL 02
5
10x
x
ENTER
IP
-
STOP
GTO 02
Que je rajoute au bout de mon code précédent,
je trouve : 3,141592653589793238462642 avec la formule de Viete en 40 itérations ... 24 décimales justes, incroyable !
L'émulateur Free42s semble travailler avec 25 chiffres significatifs ... j'en suis baba ...
BaBaoRhum
HP J728,200LX,1000CX,75C,71B, 48GX,42s,41CX,35s,32E,32Sii,28S,22s,21,16C,11C,12Cp
Sharp PC- E500,1600,1500,1350,1261,1245
Casio FX-502P,602p,850P,3900P,4000P
TI-74&92 ; Canon X-07 ; Panasonic HHC RL-H1400 ; TANDY EC-4026

Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1428
Inscription : 27 oct. 2010 20:46

Re: Misez p'tit, optimisez n°60 : Calculons Pi comme Viète

Message par Gilles59 » 09 nov. 2014 22:39

babaorhum a écrit :En parlant d'émulateur, j'ai bricolé ma version pour HP-42s sur l'émulateur Free42s, version pocket PC (pratique pour tapoter quand il fait sombre un émulateur ...). Et je m’aperçois que la précision est meilleure qu'avec la HP-42s originale(...)
je trouve : 3,141592653589793238462642 avec la formule de Viete en 40 itérations ... 24 décimales justes, incroyable !
L'émulateur Free42s semble travailler avec 25 chiffres significatifs ... j'en suis baba ...
je pense même 26 chiffres significatifs. C'est en tout cas la précision dont j'ai besoin pour trouver le même résultat que toi en utilisant la bib LongFloat HP50 avec 40 itérations.
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+

Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1428
Inscription : 27 oct. 2010 20:46

Re: Misez p'tit, optimisez n°60 : Calculons Pi comme Viète

Message par Gilles59 » 09 nov. 2014 23:41

J'ai utilisé le timer de la CASIO FX-603P pour calculer plus précisément les durées d'exécution
Je trouve pour la dernière version du programme (celle en 14 pas) :

10 boucles : 0,43 sec.
17 boucles : 0,802 sec (donne la précision maximale sur l'afficheur)
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+

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: Calculons Pi comme Viète

Message par Marge » 10 nov. 2014 01:07

Marge a écrit :
Gilles59 a écrit :Une adaptation directe de la version CASIO 602P ...

Code : Tout sélectionner

SAC 
Min00 
2 
LBL0
 * 2  / 2 M+08 MR08 √ Min08 
DSZ GOTO0
=
[/size]

... pour TI57 classique :

Code : Tout sélectionner

C.T
STO 0
2
LBL1
* 
2 
/ 
2 
SUM 7
RCL 7
SQRT
STO 7
DSZ
GTO 1
= 
R/S
Je ne comprends les calculs *2/2 dans les deux programmes. :?

Hé ho !
J'ai dit une k.......e ?

Bon, je n'ai pas dit PAS, mais ça reste compréhensible, non ?
3 hommes, 3 demis, un 3a... Magnéto, Serge !

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

Avatar de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7180
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: Misez p'tit, optimisez n°60 : Calculons Pi comme Viète

Message par gege » 10 nov. 2014 01:55

Bonjour,
et ... * 2 SUM 7 / RCL 7 ... ça gagne un pas, non ?
G.E.

Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1428
Inscription : 27 oct. 2010 20:46

Re: Calculons Pi comme Viète

Message par Gilles59 » 10 nov. 2014 08:21

Marge a écrit :
Marge a écrit :
Gilles59 a écrit :Une adaptation directe de la version CASIO 602P ...

Code : Tout sélectionner

SAC 
Min00 
2 
LBL0
 * 2  / 2 M+08 MR08 √ Min08 
DSZ GOTO0
=
[/size]

... pour TI57 classique :

Code : Tout sélectionner

C.T
STO 0
2
LBL1
* 
2 
/ 
2 
SUM 7
RCL 7
SQRT
STO 7
DSZ
GTO 1
= 
R/S
Je ne comprends les calculs *2/2 dans les deux programmes. :?

Hé ho !
J'ai dit une k.......e ?

Bon, je n'ai pas dit PAS, mais ça reste compréhensible, non ?
Hello ! Comme dit Gege et comme j'ai amélioré plus haut on peut gagner un pas.

L'idée c'est que sur des machines comme la FX602 ou TI57, on peut faire des des truc genre genre :

2
STO 7
5
/
2
SUM 7
MR 7
=

qui divise ici 5 par 4. Sauf erreur de ma part une TI58/59 n'aime pas ce genre de raccourci et fera une erreur (à tester)

Sur 602, (c'est la même chose) :

Code : Tout sélectionner

SAC
Min00
2
LBL0
 * 2  / 2 M+08 MR08 √ Min08
DSZ GOTO0
=
MR08 va contenir 2,puis sqrt(2),puis sqrt(2+sqrt(2)),puis sqrt(2+sqrt(2+sqrt(2))) etc.

On peut simplifier (puisque qu'il y par chance un autre 2 devant) en :

Code : Tout sélectionner

SAC
Min00
2
LBL0 
 * 2  M+08 /  MR08 √ Min08
DSZ GOTO0
=
soit 14 pas
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+

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°60 : Calculons Pi comme Viète

Message par Marge » 10 nov. 2014 14:38

Ah, d'accord, merci.
3 hommes, 3 demis, un 3a... Magnéto, Serge !

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

Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1428
Inscription : 27 oct. 2010 20:46

Re: Misez p'tit, optimisez n°60 : Calculons Pi comme Viète

Message par Gilles59 » 10 nov. 2014 19:01

zpalm a écrit :
Gilles59 a écrit :(je merdouille avec ma 15C LE par contre :O ) Autant j'aime bien pour calculer, autant pour programmer ouch ..
Sur la HP-15C LE en 19 pas et 1 registre (I), soit 26 octets (19+7):

Code : Tout sélectionner

01 42.21.11    LBL A
02    44 25    STO I
03        2    2
04       36    ENTER
05        0    0
06       40    +
07 42.21  0    LBL 0
08    43 36    LastX
09       34    X<>Y
10        2    2
11       20    *
12       34    X<>Y
13        2    2
14       40    +
15       11    √
16       10    ÷
17 42. 5.25    DSE I
18    22  0    GTO 0
19    43 32    RTN
On rentre le nombre de boucles puis GSB A (ou A en mode USER).
Par exemple : [9] [A]

On peut réduire le nombre de pas en utilisant un registre mémoire supplémentaire mais au total cela fait plus d'octets.
Très rapide (quasi instantané) mais pas très précis...
10 boucles donnent 3.14033... Normal ? Ca converge mais plus lentement que sur les autres calcs, on dirait qu'il faut faire 2 x plus de boucles ?
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+

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: Calculons Pi comme Viète

Message par badaze » 10 nov. 2014 19:11

Gilles59 a écrit :
1 pas de moins
15 pas : (TI 57 LED) . Copié-collé de la version 602P optimisée

Code : Tout sélectionner

C.T
STO 0
2
LBL 1
*
2
SUM 7
/
RCL 7
SQRT
STO 7
DSZ
GTO 1
=
R/S
Usage RST 10 R/S

Donne 3.1415927 (meilleur résultat avec ce nombre de chiffre) en 14 boucles
15 pas aussi sur TI 57 II mais différemment. 3.1415926 en 14 itérations.

Code : Tout sélectionner

STO 0
2
STO 2
ON/C
Lbl 1
+
2
STO x 2
=
Sqrt
STO / 2
Dsz
GTO 1
RCL 2
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 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°60 : Calculons Pi comme Viète

Message par Marge » 10 nov. 2014 21:53

A mon tour de coubertiner : Programme pour HP-29c

Code : Tout sélectionner

STO 0
2
STO 2
LBL 1
SQR
ENTER
ENTER
2
/
STO / 2
Rd
2
+
DSZ
GTO 1
RCL 2
Je ne compte pas le R/S de fin qui est un pas par défaut dans la HP, et j'arrive donc à 16 pas, soit 30 octets avec les deux registres. Je ne vois pas comment faire mieux. Bertrand ?
3 hommes, 3 demis, un 3a... Magnéto, Serge !

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

Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1428
Inscription : 27 oct. 2010 20:46

Re: Misez p'tit, optimisez n°60 : Calculons Pi comme Viète

Message par Gilles59 » 10 nov. 2014 22:15

Marge a écrit :
Je ne compte pas le R/S de fin qui est un pas par défaut dans la HP, et j'arrive donc à 16 pas, soit 30 octets avec les deux registres. Je ne vois pas comment faire mieux. Bertrand ?
J'aime bien ce MPO avec beaucoup de machines différentes !

Curieusement ce sont les calc 'non RPN' qui font plus court cette fois avec la 602P (14 pas) et la vénérable TI-57 qu'on a rarement vu en MPO et çà fait plaisir :D : c'est sur cette machine (qu'on avait prété !) que j'ai tapé mon premier programme (tiens çà me donne l'idée du prochain MPO !) et je suis passé direct plus tard à la 502P
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+

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°60 : Calculons Pi comme Viète

Message par zpalm » 11 nov. 2014 01:26

Gilles59 a écrit :J'aime bien ce MPO avec beaucoup de machines différentes !

Curieusement ce sont les calc 'non RPN' qui font plus court cette fois avec la 602P (14 pas) et la vénérable TI-57 qu'on a rarement vu en MPO et çà fait plaisir :D : c'est sur cette machine (qu'on avait prété !) que j'ai tapé mon premier programme (tiens çà me donne l'idée du prochain MPO !) et je suis passé direct plus tard à la 502P
La solution sur WP 34S tient en 11 pas sans registre mémoire additionnel :wink: , et babaorhum a une solution sur HP 42S en 12 pas, 13 si on compte le END ou RTN de fin, et également sans registre additionnel.

Sinon sur HP 15C on peut aussi faire en 14 pas comme les machines non RPN; mais comme elles on utilise alors 2 registres mémoires ce qui fait 28 octets, soit plus que ma solution en 19 pas + 1 registre (26 octets). Solution qui au passage marche bien sur ma 15C LE, as-tu vérifié si tu n'as pas fait d'erreur de saisie?

Mais comme dans tout bon MPO il reste toujours une petite optimisation à faire, voici en s'inspirant de l'excellente solution de babaorhum sur 42s et de son séquencement des opérations, une solution sur 15C LE en 18 pas et 1 registre, soit 25 octets:

Code : Tout sélectionner

01 42.21.11    LBL A
02    44 25    STO I
03        2    2
04       36    ENTER
05 42.21  0    LBL 0
06       34    X<>Y
07        2    2
08       20    *
09       34    X<>Y
10       11    √
11       10    ÷
12    43 36    LastX
13        2    2
14       40    +
15 42. 5.25    DSE I
16    22  0    GTO 0
17       34    X<>Y
18    43 32    RTN
Et pour être complet, la solution en 14 pas et 2 registres soit 28 octets:

Code : Tout sélectionner

01 42.21.11    LBL A
02    44 25    STO I
03        2    2
04    44  0    STO 0
05 42.21  0    LBL 0
06       11    √
07 44.10. 0    STO/ 0
08        2    2
09 44.20. 0    STO* 0
10       40    +
11 42. 5.25    DSE I
12    22  0    GTO 0
13    45  0    RCL 0
14    43 32    RTN
Je compte le RTN à la fin bien que sur la 15C on puisse s'en passer s'il n'y a aucun autre programme à la suite. Mais il me semble qu'un programme doit avoir un début et une fin indépendamment du contenu du reste de la mémoire programme.

Bon courage pour la synthèse de ce MPO :wink:

Répondre

Revenir vers « Tous les Pockets »