Misez p'tit, optimisez n°60 : Calculons Pi comme Viète
Modérateur : Politburo
Misez p'tit, optimisez n°60 : Calculons Pi comme Viète
François Viète, d'après Daniel ou Jean Rabel
Source wikipédia
François Viète est un mathématicien français, né à Fontenay-le-Comte (Vendée) en 1540 et mort à Paris le 23 février 1603.
Il fut le premier à proposer une expression exacte du nombre PI, expression remarquable et assez fascinante :
Il me plait à l'imaginer il y a 430 ans, la plume à la main, passer de nombreuses heures à calculer et recalculer encore cette formule.
Vous l'avez compris, le challenge est d'utiliser votre pocket préféré, même (et même surtout) très ancien, pour trouver le résultat de cette formule après un nombre paramétrable d'itérations (*) en veillant, comme le veut la tradition, à ne pas utiliser le moindre octet (et même demi-octet !) inutile.
(*) EDIT :j'ai remplacé 10 'itérations' par un "nombre paramétrable d'itérations" (sur la pile ou autre moyen de saisie : Viete(10) par ex.). Cela permettra de voir la rapidité ou pas de la convergence et autres subtilités.
Par itération il faut comprendre le nombre d'élément de la forme 1/Racine-Carrée() dans la formule.
( Sommaire des MPO )
Modifié en dernier par Gilles59 le 05 nov. 2014 23:25, modifié 7 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+ CM14 et MM12 / Alice 32
- Marge
- Fonctionne à 14400 bauds
- Messages : 6186
- Enregistré le : 01 oct. 2008 14:39
- Localisation : En bas, tout au fond à gauche.
Re: Calculons Pi comme Viète
Mais voilà un MPO qui ne dit pas son nom ! De tête, heu, 2 divisé par 1,414... d'accord, je vais demander à mon fils.
3 hommes, 3 demis, un 3a... Magnéto, Serge !
Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67__: A L I E N .
♣ ♦ « Boris », c'était juste Maurice enrhumé. ♥ ♠
Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67__: A L I E N .
♣ ♦ « Boris », c'était juste Maurice enrhumé. ♥ ♠
- zpalm
- Fonctionne à 9600 bauds
- Messages : 2931
- Enregistré le : 03 mai 2008 15:33
- Localisation : Grenoble
Re: Calculons Pi comme Viète
Allez, un premier jet vite fait sur 41C en 16 pas (35 ans c'est assez ancien ? je n'ai pas sorti la WP 34S, pas assez ancienne..) :
Et le résultat après 10 itérations : le voici.
Ceci fait, maintenant j'ai un doute : que représentent 10 itérations ? Mon programme n'en fait il pas 11?
Code : Tout sélectionner
01 LBL"VIETE
02 10
03 ENTER
04 2
05 ENTER
06 0
07 LBL 00
08 2
09 ST* Z
10 +
11 SQRT
12 ST/ Y
13 DSE Z
14 GTO 00
15 RDN
16 END
Ceci fait, maintenant j'ai un doute : que représentent 10 itérations ? Mon programme n'en fait il pas 11?
- bernouilli92
- Fonctionne à 14400 bauds
- Messages : 5265
- Enregistré le : 21 nov. 2012 13:03
- Localisation : Ile de France
Re: Calculons Pi comme Viète
Voici ma proposition en RPL :
Il faut remplacer SQRT par le symbole racine carrée.
Total : 50 octets
On doit pouvoir battre des records de taille avec la wp34s.
Code : Tout sélectionner
<<
2 0
1 9 START
2 + SQRT 2 OVER / ROT * SWAP
NEXT DROP
>>
Total : 50 octets
On doit pouvoir battre des records de taille avec la wp34s.
HP, Casio, Sharp, Psion, quelques TI et divers autres
Re: Calculons Pi comme Viète
Bonjour à tous
Une version pour la Ti 66.
Résultat :3.141587725 en 15 sec.
Une version pour la Ti 66.
Code : Tout sélectionner
000 2
001 STO
002 01
003 √x
004 STO
005 00
006 9
007 STO
008 02
009 2
010 /
011 RCL
012 00
013 =
014 PRD
015 01
016 RCL
017 00
018 +
019 2
020 =
021 √x
022 STO
023 00
024 DSZ
025 02
026 00
027 09
028 RCL
029 01
030 R/S
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
- jvernet
- Fonctionne à 14400 bauds
- Messages : 7958
- Enregistré le : 24 mai 2002 09:57
- Localisation : France 69
- Contact :
Re: Calculons Pi comme Viète
Ressorti ma 7500G:
Ou SQR est le signe racine, et ¤ le signe triangle "Display"
marrant, je n'avais pas reprogrammé cette machine depuis au moins 20 ans, et la syntaxe reste. Bon, elle est pas bien evoluée.
41 pas.
Code : Tout sélectionner
?->M
2->X
SQR(X)->Y
Lbl 1
X*2/Y->X
SQR(2+Y)->Y
Dsz M:Goto 1
X¤
marrant, je n'avais pas reprogrammé cette machine depuis au moins 20 ans, et la syntaxe reste. Bon, elle est pas bien evoluée.
41 pas.
"l'ordinateur et l'homme sont les deux opposés les plus intégraux qui existent. L'homme est lent, peu rigoureux et très intuitif. L'ordinateur est super rapide, très rigoureux et complètement con."
- zpalm
- Fonctionne à 9600 bauds
- Messages : 2931
- Enregistré le : 03 mai 2008 15:33
- Localisation : Grenoble
Re: Calculons Pi comme Viète
J’arrive à 12 pas (24 octets):bernouilli92 a écrit :On doit pouvoir battre des records de taille avec la wp34s.
Code : Tout sélectionner
01 LBL A
02 #009
03 0
04 NEXTP
05 2
06 STO* Y
07 RCL+ L
08 SQRT
09 /
10 DSZ Y
11 BACK 006
12 END
Code : Tout sélectionner
01 LBL A
02 0
03 NEXTP
04 2
05 STO* Y
06 RCL+ L
07 SQRT
08 /
19 DSZ Y
10 BACK 006
11 END
- bernouilli92
- Fonctionne à 14400 bauds
- Messages : 5265
- Enregistré le : 21 nov. 2012 13:03
- Localisation : Ile de France
Re: Calculons Pi comme Viète
C'est bien ce que je disais. En RPL, on est défavorisé quand on compte en octets, car chaque instruction fait 2,5 octets. En fait on devrait compter en nombre de pas. Après tout, il est fort probable qu'un pas sur wp34s prenne plus qu'un octet.
Du coup ma proposition fait 20 pas.
Du coup ma proposition fait 20 pas.
HP, Casio, Sharp, Psion, quelques TI et divers autres
- zpalm
- Fonctionne à 9600 bauds
- Messages : 2931
- Enregistré le : 03 mai 2008 15:33
- Localisation : Grenoble
Re: Calculons Pi comme Viète
Un pas sur wp34s prend 2 octets, sur hp 41c c'est variable, la plupart des instructions sont sur 1 ou deux octets mais certaines font plus (labels alpha, nombres, chaines de caractères).
- C.Ret
- Fonctionne à 9600 bauds
- Messages : 3419
- Enregistré le : 31 mai 2008 23:43
- Localisation : N 49°22 E 6°10
Re: Calculons Pi comme Viète
Excellent, j'ai même eut du mal à comprendre.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 >>
J'ai dû créer une fonction SQRT pour mieux analyser est comprendre que le produit était fait dans le sens inverse :
... * 2/√(√(√2+2)+2) * 2/√(√2+2) * 2/√2 * 2
Pour ceux qui aimerait refaire pas à pas le calcul, je préconise d'utiliser la fonction SQRT suivante :
Code : Tout sélectionner
« → x « '√a' 2 x EXSUB » »
Maintenant que j'ai compris, je peux MPOiser le code de notre ami : j'en profite pour le para-métriser, le nombre d'"itérations" étant au niveau 1: de la pile, utiliser le code suivant pour obtenir l'estimation de PI par François Viète correspondante :
Code : Tout sélectionner
« 0 → n b
« 2
1 n START
2 b 2 + √ DUP 'b' STO / *
NEXT » »
* d'éviter les mouvements de la pile
* faire le produit dans le sens de la formule donnée par Gilles59 (même si cela ne change rien numériquement - cela évite juste le ROT)
* le DROP final n'est plus nécessaire pour vider la pile du "pré-calcul de l'itération suivante" car la calculette laisse bien cachée dans son ventre le contenu des registres de la fonction LAST.
Par contre, il n’évite pas la répétition de tous ces 2, bien trop nombreux à mon avis pour un programme sérieusement optimisé.
La version non-paramétrique s'écrie :
Code : Tout sélectionner
« 0 → b
« 2
1 9 START
2 b 2 + √ DUP 'b' STO / *
NEXT » »
P.S.: j'ai de plus en plus de mal à battre les RPL-istes de ce forum. Je rouille ??
J'oubliais de poster la version pour SHARp PC-1211 :
Code : Tout sélectionner
1:"V" AREAD N : B=0 : P=2 : FOR I=1 TO N : B=√(B+2) : P=2P/B : NEXT I : PRINT N,P : END
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.
Re: Calculons Pi comme Viète
La première version que j'avais faite,
En entrée le nombre d'itération :
56,5 octets, soit 6,5 de plus que celle de Bernouilli qui me semble difficilement améliorable en RPL!
En entrée le nombre d'itération :
Code : Tout sélectionner
«
2 1 ROT FOR n
2 0
1 n START
2 + √
NEXT
/ *
NEXT
»
Modifié en dernier par Gilles59 le 04 nov. 2014 23:42, modifié 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+ CM14 et MM12 / Alice 32
Re: Calculons Pi comme Viète
Bravo ! tu m'as doublé, je voulais faire une version pour ce foudre de guerretyann a écrit :Bonjour à tous
Une version pour la Ti 66.
Résultat :3.141587725 en 15 sec.
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
Re: Calculons Pi comme Viète
Tu n'as pas la commande BYTES sur 28S ? Mettre le programme sur la pile puis BYTES...C.Ret a écrit :
Juste histoire de comptabiliser les 1/2-octets, octets ou nombre de pas je ne sais pas comment faire efficacement sur mon HP-28S
Par contre tu sera je pense déçu car les sous-programmes intégrés entre << >> sont assez gourmands ....
Modifié en dernier par Gilles59 le 04 nov. 2014 23:45, modifié 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+ CM14 et MM12 / Alice 32
Re: Calculons Pi comme Viète
Bonsoir à tous
Nouvelle version pour la Ti 66.
Les opérations en mémoire consommant 2 pas minimum,
je suis passé par le registre de test 't' accessible par
x<>t (x échange t) 1 pas.
Soit 4 petits pas de gagnés.
Nouvelle version pour la Ti 66.
Les opérations en mémoire consommant 2 pas minimum,
je suis passé par le registre de test 't' accessible par
x<>t (x échange t) 1 pas.
Code : Tout sélectionner
000 2
001 √x
002 x<>t
003 9
004 STO
005 02
006 2
007 /
008 x<>t
009 STO
010 00
011 x
012 2
013 =
014 x<>t
015 RCL
016 00
017 +
018 2
019 =
020 √x
021 x<>t
022 DSZ
023 02
024 00
025 07
026 R/S
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
- zpalm
- Fonctionne à 9600 bauds
- Messages : 2931
- Enregistré le : 03 mai 2008 15:33
- Localisation : Grenoble
Re: Calculons Pi comme Viète
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:
Code : Tout sélectionner
Octets
01 LBL"V” 5
02 9 1
03 ENTER 1
04 2 1
05 ENTER 1
06 0 1
07 LBL 00 1
08 2 1
09 ST* Z 2
10 + 1
11 SQRT 1
12 ST/ Y 2
13 DSE Z 2
14 GTO 00 2
15 RDN 1
16 RTN 1
-----
Total: 24 octets