Misez P'tit, Optimisez n°14 - une approximation de PI

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

Avatar du membre
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3641
Enregistré le : 06 sept. 2011 14:57
Localisation : Normandie

Re: Optimiser - une approximation de PI

Message par Hobiecat »

gege a écrit :J'avais pensé surtout à taper la formule le plus économiquement possible, mais tu étends l'idée habilement, première idée : utiliser un PCE-500 ou autre poquette double précision, sinon il va falloir programmer et là... :?: :!:
Pour l'économie, c'était déjà fait, j'ai sorti ma 15c et en avant ! :wink: donc quelque chose du genre :

Code : Tout sélectionner

2 V 1 - x² 
2 ENTER 3 V - *
7 V 6 V - x² *
8 ENTER 7 V 3 x - *
10 V 3 - x² *
15 V 14 V - * 
4 ENTER 15 V - x² *
6 ENTER 35 V - 4 / *
LN 210 V / 2 CHS *
60 touches à vue de nez !

Par contre, pour sortir les 20 décimales avec cette formule, je ne vois pas d'autre solution que d'avoir une bécane qui a la précision requise. Sinon, il faut passer à l'exercice de programmation, mais avec d'autres algorithmes.

En dernier recours, il restera la fameuse "poésie" : Que j'aime à faire apprendre un nombre utile aux sages, immortel Archimède, artiste ingénieur, qui de ton jugement peut priser la valeur, etc... donc en comptant les lettres : 3,141 592 653 589 793 238 462 6
22 décimales, c'est plus qu'assez ! :arrow:
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2143
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Misez P'tit, Optimisez n°14 - une approximation de PI

Message par cgh »

Bon. Un petit retour dans la prehistoire !
Un article du Science & Vie 759 sur le site de Thomas.
Y'en a pour toutes les machines... Hemm... sauf Ca :mrgreen: ...tut dut dut... :arrow:
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque
Avatar du membre
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3641
Enregistré le : 06 sept. 2011 14:57
Localisation : Normandie

Re: Misez P'tit, Optimisez n°14 - une approximation de PI

Message par Hobiecat »

cgh a écrit :Bon. Un petit retour dans la prehistoire !
Un article du Science & Vie 759 sur le site de Thomas.
Y'en a pour toutes les machines... Hemm... sauf Ca :mrgreen: ...tut dut dut... :arrow:
J'adore : 3600 décimales sur la HP41 en ... 4 mois ! :mrgreen:
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2143
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Misez P'tit, Optimisez n°14 - une approximation de PI

Message par cgh »

Hobiecat a écrit :
cgh a écrit :Bon. Un petit retour dans la prehistoire !
Un article du Science & Vie 759 sur le site de Thomas.
Y'en a pour toutes les machines... Hemm... sauf Ca :mrgreen: ...tut dut dut... :arrow:
J'adore : 3600 décimales sur la HP41 en ... 4 mois ! :mrgreen:
Comme dit le proverbe: "Qui va loin menage sa monture."

PS: Je me souviens d'ailleurs avoir entre ce code dans ma TI-58 fin 1980.
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque
Avatar du membre
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3641
Enregistré le : 06 sept. 2011 14:57
Localisation : Normandie

Re: Misez P'tit, Optimisez n°14 - une approximation de PI

Message par Hobiecat »

En tout cas, l'article est bien sympa : la grande époque de S&V ! Et on voit que les imprimantes étaient denrée rare à l'époque : tous les programmes sont écrits à la main (comme les Romains :wink: )
Il faudra que j'essaie sur la 67, pour voir à quoi ça ressemble...
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2143
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Misez P'tit, Optimisez n°14 - une approximation de PI

Message par cgh »

Hobiecat a écrit :En tout cas, l'article est bien sympa : la grande époque de S&V ! Et on voit que les imprimantes étaient denrée rare à l'époque : tous les programmes sont écrits à la main (comme les Romains :wink: )
Il faudra que j'essaie sur la 67, pour voir à quoi ça ressemble...
C'est cool ! Ca va occuper la Grande Dame pendant un bon moment :mrgreen:
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque
leduigou
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 109
Enregistré le : 28 mai 2011 14:46
Localisation : Paris

Re: Misez P'tit, Optimisez n°14 - une approximation de PI

Message par leduigou »

Un petit programme pour la 41C donne cela.
Le résultat - le ∏ de la calculatrice donne zéro ...
Donc c'est aussi 10 chiffres significatifs.
Image
Cordialement
Frédéric
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3419
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez P'tit, Optimisez n°14 - une approximation de PI

Message par C.Ret »

Le programme proposé pour le SHARP PC-1211 est un peu bête. Sans compter qu'il y a moyen d'économiser quelques caractère ici et là.

Voici, une version corrigée qui ne fait que 260 STEPS et donc permet de calculer 1660 décimales de PI.

Code : Tout sélectionner

10:PAUSE E:FOR A=171 TO 6 STEP -1
20:     B=(A(A)-INT A(A))E+Exp-5D,
        C=(INT A(A)*E+INT B)/Exp5,
        D=INT C,
        A(A)=(C-D)*Exp5+B-INT B
30:NEXT A:E=2E+1
40:FOR A=6 TO 171
50:     B=INT ((Exp5D+INT A(A))/E),
        D=(Exp5D+INT A(A))-BE,
55:     C=INT ((D+A(A)-INT A(A))*Exp5/E),
        D=(D+A(A)-INT A(A))*Exp5-CE,
        A(A)=B+Exp-5C
60:NEXT A:F=F+2Exp4,E=(E-3)/2,D=0:IF E GOTO 10
70:FOR A=6 TO 171:PRINT A(A):NEXT A

Pour exécuter faire :
CLEAR
E=5488
RUN
Comme on peut le voir, cette dernière version est identique à celle de M. Labat (de PARIS) et publié dans Science&Vie n°759
Seule différence, quelques parenthèses inutiles retirées et surtout l'astuce que X*Exp5 peut se contracter en Exp5X.

Sinon, pour atteindre la limite théorique des 1660 décimales il faudra laisser fonctionner ce pauvre PC-1211 presque deux mois, ce qui ne peut se faire qu'avec une alimentation extérieure, car les piles seront usées avant la fin du programme.

C'est pour cela que je dis que ce programme est bête. Il passe son temps à diviser et multiplier des zeros tout en transmettant d'éventuelles retenues d'un registre à l'autre pour rien.

Bref, j'ai pas à ce jour réussi à faire fonctionner ce programme et obtenir la moindre décimale de PI !
Modifié en dernier par C.Ret le 22 janv. 2023 13:32, modifié 1 fois.
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
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2933
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: Misez P'tit, Optimisez n°14 - une approximation de PI

Message par zpalm »

leduigou a écrit :Mais c'est de la triche, il n'y a pas de calculatrice en Fortran77 :mrgreen:
Sharp PC-1300 (mini-FORTRAN)
Avatar du membre
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7147
Enregistré le : 31 janv. 2008 14:24
Localisation : Banlieue Paârisienne
Contact :

Re: Misez P'tit, Optimisez n°14 - une approximation de PI

Message par gege »

Hello,
Avec une librairie multiprecision sur nSpire (oui j'ai honte), je trouve que la formule donne :
3.141592653589793238206301010293
ce qui donne donc 18 decimales exactes, mais je soupconne le logarithme d'etre un peu foireux...
Si la librairie interesse quelqu'un, passez-moi un MP.
Je vais regarder sur Maple ou equivalent.
G.E.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3419
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez P'tit, Optimisez n°14 - une approximation de PI

Message par C.Ret »

C.Ret a écrit :[...]Bref, j'ai pas à ce jour réussi à faire fonctionner ce programme et obtenir la moindre décimale de PI !
C'est un peu frustrant. J'avais déjà trouvé cet article il y a longtemps et n'avait pas non plus à l'époque réussit à modiifer ce programme pour avoir PI en un temps décent.

J'ai donc cherché à mieux comprendre la méthode.
Par chance, elle est bien expliquée sur ce site :
http://serge.mehl.free.fr/anx/pi_100deci.html

J'ai donc adapté l'algorithme donné pour mon pauvre SHARP PC-1211.
Cela donne un programme d'environ 217 STEPs qui laisse donc disponible 175 MEMORIES pour stocker les décimales de PI, soit un maximum théorique d'environ 1044 décimales. Théorique, car personne n'aura la patience (et les piles) pour arriver à un tel résultat. Il faut quelque(s) fraction(s) de seconde sur un PC pour avoir aussi peu de décimales !

Il doit être possible d'optimiser ce code ou de gagner quelque mémoire, mais est-ce bien utile ?

L'avantage de cette version, qui utilise le même algorithme que le programme de SVI , est que l'on ne pert pas de temps à calculer les décimales au-delà de la limite demandée. Le nombre de registres utilisé (A(6 à E)) dépend du nombre demandé. Les calculs sont donc rapides pour un nombre faible de décimales.

Par contre, le temps croît rapidement en fonction de ce nombre, car très vite chaque division et chaque multiplication prennent d'autant plus de temps que n_max est important.

Code : Tout sélectionner

  REM ---------------  saisie nombre décimales
1:CLEAR :INPUT D
  REM --------------- initialisation - D = nmax, E nombre de block, T(0 à ...) = A(7 à E)=2n_max/(2n_max+1)  
2:E=7+INT .2D,D=INT (3+D/LOG 2),G=2D,F=G+1:GOSUB 8
  REM --------------- boucle principale  To=To+2, divise T() par 2n-1, multiplie T() par n-1
3:PAUSE D:G=G+2:IF D<2 BEEP 1:FOR A=7 TO E:PRINT A(A):NEXT A:END
4:F=2D-1:GOSUB 8:F=D-1:GOSUB 9:D=D-1:GOTO 3

  REM - - - - - - - - sous-programme division           A(7 à E) par F
8:C=0:FOR A=7 TO E:A(A)=A(A)+€6C,B=INT (A(A)/F),C=A(A)-FB,A(A)=B:NEXT A:RETURN

  REM - - - - - - - - sous-programme multiplication      A(7 à E) par F
9:C=0:FOR A=E TO 7 STEP -1:B=FA(A)+C,C=INT €-6B,A(A)=B-€6C:NEXT A:RETURN
( € correspond en fait à la touche Exp qui permet de saisir les exposants de 10).

Variables:
A: compteur i
B: quotient/produit/valeur intermédiaire
C: retenue
D: nbr décimales de PI souhaitée / nmax / n
E: nombre/limite registre stockage des décimales: To=A(7)=G .
F: facteur pour respectivement division et multiplication.
G à A(177) :mémorisation de PI avec jusqu'à presque 1000 décimales. En fait 6 décimales par registre mémoire (valeur absolue pour simplifier expression pour des calculs plus rapides).

Quelques essais:

Code : Tout sélectionner

5 dec ( 2'30")  *3.14159*1
10dec ( 5'03")  *3.141592 6535*85
12dec ( 5'52")  *3.141592 653589*
30dec (45'    ) *3.141592 653589 793238 462643 383279 502884 19*7165 932036
Pas mal, moins d'une heure pour 30 décimales !

Mais, mon programme affichant 22 décimales sur SHARP-PC1211 le plus rapide est certainement :

Code : Tout sélectionner

10:PRINT "3.141592653589793238462"
Et celui en affichant 46 (mais qui nécessite d'appuyer sur [ENTER] à mi chemin:

Code : Tout sélectionner

10:PRINT "3.141592653589793238462":PRINT "643383279502884197169399":GOTO 10
Modifié en dernier par C.Ret le 22 janv. 2023 13:49, modifié 2 fois.
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
jvernet
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7958
Enregistré le : 24 mai 2002 09:57
Localisation : France 69
Contact :

Re: Misez P'tit, Optimisez n°14 - une approximation de PI

Message par jvernet »

J'ai quand à moi testé la solution en C sur mon Sharp PC-850V (la version qui ne reclame pas 4801 long int, car pas assez de méoire). Eh bien... Le programme est bien tapé, zero faute, il tourne, et me donne jamais le même résultat (ni PI, d'ailleurs).

bizarre bizarre.
"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."
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2143
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Misez P'tit, Optimisez n°14 - une approximation de PI

Message par cgh »

jvernet a écrit :J'ai quand à moi testé la solution en C sur mon Sharp PC-850V (la version qui ne reclame pas 4801 long int, car pas assez de méoire). Eh bien... Le programme est bien tapé, zero faute, il tourne, et me donne jamais le même résultat (ni PI, d'ailleurs).

bizarre bizarre.
C'est un programme PIttorsque !!! :mrgreen:
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque
Avatar du membre
Marcus von Cube
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 914
Enregistré le : 20 avr. 2006 13:48
Localisation : Wehrheim, Allemagne
Contact :

Re: Misez P'tit, Optimisez n°14 - une approximation de PI

Message par Marcus von Cube »

cgh a écrit : C'est un programme PIttorsque !!! :mrgreen:
PItoyable ?
Avatar du membre
badaze
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 8402
Enregistré le : 12 févr. 2007 18:36
Localisation : Pas très loin de Lyon
Contact :

Re: Misez P'tit, Optimisez n°14 - une approximation de PI

Message par badaze »

jvernet a écrit :J'ai quand à moi testé la solution en C sur mon Sharp PC-850V (la version qui ne reclame pas 4801 long int, car pas assez de méoire). Eh bien... Le programme est bien tapé, zero faute, il tourne, et me donne jamais le même résultat (ni PI, d'ailleurs).

bizarre bizarre.
Tu ne PIges pas pourquoi il ne fonctionne pas ?
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 »