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 du membre
agent_macgeek
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 117
Enregistré le : 22 févr. 2014 17:18
Localisation : Bienne - Suisse
Contact :

Re: Calculons Pi comme Viète

Message par agent_macgeek »

bernouilli92 a écrit :Voici ma proposition en RPL :

Code : Tout sélectionner

<< 
  2 0 
  1 9 START 
    2 + SQRT 2 OVER / ROT * SWAP
  NEXT DROP
>>
Il faut remplacer SQRT par le symbole racine carrée.
Total : 50 octets

On doit pouvoir battre des records de taille avec la wp34s.
Excellent, le résultat est instantané, sinon presque, le 35s et le 17bII+ restent loin derrière.
Nostalgique du bon vieux temps depuis 1977.

1 MacBook Pro de 2015 sous High Sierra
1 TI Nspire CX CAS
1 HP 50g
1 HP 35s
1 HP 17BII+
1 iPhone 7 sous iOS 11
Avatar du membre
Paul Tergeist
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2417
Enregistré le : 15 oct. 2007 15:50
Localisation : 3ème planète après le soleil

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

Message par Paul Tergeist »

Je découvre ce sujet et je suis agréablement surpris.

Bravo Gilles pour cette méthode de calcul de Pi que je ne connaissais pas.

François Viète je le connais surtout par sa cuisine (excellente d'ailleurs).

Je suis épaté par le nombre, la diversité et les connaissances des participants.

Et le petit grain de folie pour parfaire le tout.

Ca redonne confiance en l'humanité.
OlidaBel
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 106
Enregistré le : 04 avr. 2021 16:09
Localisation : 50.693165,4.573478

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

Message par OlidaBel »

Salut. Un peu tardivement j’ai fait connaissance avec ce MPO.
Je n’ai pas pu le coder de façon très efficace :lol: ..., ni court ni rapide. Sur 48GX et 50G.
Une version avec variables locales et une autre sans variable donc pas mal de mouvements et copie dans la pile (étonnamment peu performante, va falloir y aller mollo avec les PICK et les ROLLD)...
Dur dur pour la partie technique, mais plaisir de traîner ici, chouette forum.
Y a des gens très compétents ici, impressionnant :)
Avatar du membre
dprtl
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 463
Enregistré le : 27 janv. 2013 00:26
Localisation : Strasbourg
Contact :

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

Message par dprtl »

Pour compléter la longue liste des machines qui ont participé à ce MPO, j'ai ressorti ma Casio FX-CP400. À tort ou à raison, j'ai l'impression que cette calculette est un peu mal aimée. Peut-être qu'elle souffre de la comparaison avec la HP Prime, de conception un peu plus récente ? Pourtant, à l'usage, elle ne manque pas d'arguments avec son grand écran couleur et ses claviers virtuels très accessibles (au stylet).

J'ai tenté une première résolution de ce MPO sans programmation, avec l'application intégrée nommée "Suites". Ça fonctionne bien, même si la précision maximale de la Casio n'est pas exceptionnelle dans ce mode (atteinte à l'itération 17 environ) :

Image

J'espère que les liens vers mes images résisteront aux années. Car, malheureusement, beaucoup d'images anciennes ont été perdues dans l'historique du forum.

J'ai ensuite tenté une programmation naïve avec le Basic spécifique de cette machine :

Image

Ici, le programme met 46s à dérouler ses 26 itérations. Ce qui confirme ce que tout le monde sait déjà : la FX-CP400 n'est pas un foudre de guerre. Sur la taille du programme, il pèse très exactement 236 octets en mode "PRGM", ou 140 octets en "TEXT". C'est alors que j'ai découvert un menu "Compression" avec lequel je m'attendais à pouvoir battre la FX-180P de Xerxes :D Mais non : le programme compressé pèse encore 132 octets :? Dans ce mode "EXE" (je l'aurais plutôt nommé "INU" comme inutile), l'édition du programme devient impossible, alors que le temps d'exécution ne diminue pas.
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°60 : Calculons Pi comme Viète

Message par gege »

Bonjour,
Bonne idée de ressortir une ClassPad, et comme tu l'as remarqué cette machine innovante et sympathique souffre de quelques tares :
- puissance : faible
- n'accepte pas de sauvegarder un programme qui ne soit pas syntaxiquement correct (j'appelle ceci le "problème de l'envie de pisser")
- clavier virtuel disposé probablement par un adepte du masochisme
- clavier réel quasiment sans intérêt (deux touches "moins" mais pas de touche "2nde" ???)
Dommage, avec le même nombre de touches physiques, un processeur raisonnable et un clavier virtuel bien rangé cette gamme pourrait rivaliser avec la HP Prime (je ne mentionne même pas cette pauvre cochonnerie de TI Nspire (il paraît qu'ils en ont vendu une cette année) - ah zut).
A+
G.E.
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°60 : Calculons Pi comme Viète

Message par Xerxes »

dprtl a écrit : 23 avr. 2021 10:48 Ici, le programme met 46s à dérouler ses 26 itérations. Ce qui confirme ce que tout le monde sait déjà : la FX-CP400 n'est pas un foudre de guerre.
Salut Daniel, have you also checked the execution time using setdecimal instead of approx?
Avatar du membre
dprtl
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 463
Enregistré le : 27 janv. 2013 00:26
Localisation : Strasbourg
Contact :

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

Message par dprtl »

Xerxes a écrit : 25 avr. 2021 16:12
dprtl a écrit : 23 avr. 2021 10:48 Ici, le programme met 46s à dérouler ses 26 itérations. Ce qui confirme ce que tout le monde sait déjà : la FX-CP400 n'est pas un foudre de guerre.
Salut Daniel, have you also checked the execution time using setdecimal instead of approx?
You're right! If the program starts with 'setdecimal', it takes less than 16s to calculate the same 26 itterations (same precision). My first version was very inefficient.
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°60 : Calculons Pi comme Viète

Message par Xerxes »

dprtl a écrit : 25 avr. 2021 18:55 My first version was very inefficient.
I'am afraid that the test code of the n-queens benchmark for the ClassPad 300+, ClassPad 330 and
FX-CP400 has the same problem, because I also missed to use setdecimal at that time. I think I have
to remove the results of these calculators.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3404
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Calculons Pi comme Viète

Message par C.Ret »

zpalm a écrit : 04 nov. 2014 23:32 Si l'on compte les octets la bonne vieille 41C s'en sort plutôt bien à égalité avec la WP 34S avec 24 octets malgré le label Alpha initial:
En relisant ce fil, j'ai trouvé le moyen de gagner quelques octets: en gardant le même Label et RTN final, j'arrive à 21 octets.

Pour avoir les constantes 2 et 0 sur deux instructions distinctes (aux lignes 002 et 003), j'utilise une saisie semi-synthétique qui s'inspire de ce que l'on fait sur Ti-58c en éditant le code à postériori. J'entre d'abord :

Code : Tout sélectionner

001 LBL"V
002 2
003 ENTER^
004 0
005 _
Puis deux petits coups sur la touche [BST] et une pression sur [ <- ] fait disparaitre l'instruction [ENTER^] de la ligne 003.

L'autre économie est réalisé en conservant la valeur de B dans le registre LASTx ce qui économise quelque instruction de mouvement d e la pile.

Code : Tout sélectionner

(1)   002   2
(1)   003   0
(1)   004   +
(1)   005   LBL 01
(1)   006   2
(2)   007   ST* Y
(1)   008   LASTX
(1)   009   +
(1)   010   SQRT
(1)   011   /
(2)   012   DSE Y
(2)   013   GTO 01         (Total:21 octets  en comptant  (5) pour  001   LBL"V et (1)  pour  014   RTN
Gilles59 a écrit : 10 nov. 2014 07:21L'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)
J'ai testé cela marche parfaitement sur une TI-58c. Elle supporte pas mal d'astuces comme sur une TI-57 sauf pour deux différences fondamentales:
- La répétition de deux opérations arithmétiques successives qui d'éclanche une erreur (avec le clignotement et le blocage du clavier); c'est très gênant en cas de faux rebonds d'un clavier vieillissant !
- Les instructions de tests conditionnels, drapeaux et boucles ne 'sautent' pas une instruction mais déclenches ou non le 'saut' vers le label ou le numéro d'instruction indiqué.
Il y a donc parfois des astuces impossibles à réaliser comme on le fait parfois sur fx-602p, TI-57 ou les HP lorsqu'en fonction d'un résultat il n'y a qu'une seule opération à effectuer. On perd alors les octets nécessaires au label ou au saut

J'arrive aussi à 21 octets sur la TI-58c avec le code complet suivant:

Code : Tout sélectionner

000 47           CMs 
001 42 00        STO 00
003 02            2
004-42 01        STO 01
006 65            × 
007 02            2
008 44 02        SUM 02
010 55            ÷ 
011 43 02        RCL 02
013 34           √x 
014 42 02        STO 02
016 95            = 
017 97 00 00 04  Dsz 0 004
021 92           RTN
Utilisation: Saisir le nombre d'itération souhaité puis presser RST et R/S qui affiche l'approximation de PI correspondante.
On obtient PI = 3.1415592654 à partir de 17 itérations en environ 19".


Evidemment, il y a des codes plus courts mais qui ne font pas tout le staff; par exemple celui-ci ne fait que 14 octets, mais il faut le lancer et exécutant 2nd CMS 2 RST R/S et l'arrêter lorsque l'affichage arrive à une valeur constante de PI:

Code : Tout sélectionner

000-42 01        STO 01
002 65            × 
003 02            2
004 44 02        SUM 02
006 55            ÷ 
007 43 02        RCL 02
009 34            √x 
010 42 02        STO 02
012 95            = 
013 66           Pause 
014 81           RST 


C'est le plus court que j'ai mais aussi celui qui répond le moins aux contraintes de ce MPO.


Enfin, pour HP-71B en 50 octets (taille totale du fichier RAM):

Code : Tout sélectionner

CAT  MPO60    BASIC   50   22/06/23  13:01

10 DESTROY ALL @ P=2 @ INPUT N @ FOR I=1 TO N @ B=SQR(B+2) @ P=2*P/B @ NEXT I @ DISP N;P


Donne instantanément (moins de 830 ms) sa meilleure approximation de PI ~ 3.14159265356 en 17 itérations.
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.
Répondre

Retourner vers « Tous les Pockets »