Misez P'tit, Optimisez n°14 - une approximation de PI
Modérateur : Politburo
- jvernet
- 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
Je me suis pris comme un PIed, c'est que tu pense?
"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."
- badaze
- Fonctionne à 14400 bauds
- Messages : 8412
- 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
PIre.jvernet a écrit :Je me suis pris comme un PIed, c'est que tu pense?
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.
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.
- C.Ret
- Fonctionne à 9600 bauds
- Messages : 3422
- 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
oupps...
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: Misez P'tit, Optimisez n°14 - une approximation de PI
Bonjour,
J'ai attendu 9 ans avant de faire ce MPO, juste le temps qu'ils sortent la calculatrice NUMWORKS pour exploser les records de vitesse
Ci-dessous le programme très très largement inspiré du lien que vous trouverez plus bas. Il donne 1860 décimales en environ 30 secondes.
En savoir plus (lien vers l'article + autres méthodes de calculs)
J'ai attendu 9 ans avant de faire ce MPO, juste le temps qu'ils sortent la calculatrice NUMWORKS pour exploser les records de vitesse
Ci-dessous le programme très très largement inspiré du lien que vous trouverez plus bas. Il donne 1860 décimales en environ 30 secondes.
Code : Tout sélectionner
def pi():
r = [2000] * 6525
r[6524] = 0
c = 0
a = 10000
for k in range(6524,0,-14):
d = 0
i = k
while True:
d += r[i] * a
b = 2 * i - 1
r[i] = d % b
d //= b
i -= 1
if i == 0: break
d *= i
v = c + d // a
print("{0:04d}".format(v),end="")
c = d % a
Re: Misez P'tit, Optimisez n°14 - une approximation de PI
Ci-dessous le même programme (pour les Ti 84 Plus et 83 Premium CE) qui permet d'obtenir 288 décimales exactes (26'40" sur la Ti-84 et 12'50" sur la Ti 83 Premium CE Edition Python (sur cette machine, la version Python du post précédent avec le nombre 982 permet de trouver les 288 décimales en 10 secondes)).
La fonction "reste(N,D)" n'existant sur les Ti-84 Plus qu'à partir de la version 2.53 et la mienne étant encore en 2.40, j'utilise la formule classique N-D*ent(N/D).
Avec un peu de courage on pourrait améliorer le programme et utiliser les 6 listes de la machine, ce qui permettrait de dépasser les 1700 décimales.
Lien vers le fichier 8XP : https://uabox.univ-angers.fr/index.php/ ... 3uS3NJDjKj
La fonction "reste(N,D)" n'existant sur les Ti-84 Plus qu'à partir de la version 2.53 et la mienne étant encore en 2.40, j'utilise la formule classique N-D*ent(N/D).
Avec un peu de courage on pourrait améliorer le programme et utiliser les 6 listes de la machine, ce qui permettrait de dépasser les 1700 décimales.
Code : Tout sélectionner
982→dim(L₁
Fill(2000,L₁
0→L₁(981
0→C:1E4→A
For(K,981,1,-14
0→D
K→I
1→S
While S
D+AL₁(I→D
2I-1→B
D-Bint(D/B→L₁(I ou reste(D,B→L₁(I pour les versions plus récentes
int(D/B→D
I-1→I
If I=0
Then
Disp C+int(D/A
0→S
Else
DI→D
End
End
D-Aint(D/A→C ou reste(D,A→C
End
- fred260571
- Fonctionne à 1200 bauds
- Messages : 363
- Enregistré le : 19 avr. 2016 13:10
- Localisation : Toulouse
Re: Optimiser - une approximation de PI
Le soucis c'est qu'il n'initialise pas les variables "b" et "e" donc il y a des nombres random dans b et ejvernet a écrit : ↑24 janv. 2012 13:412400 décimales de PI juste (il parait).Code : Tout sélectionner
long a=10000,b,c=8400,d,e,f[8401],g; main(){for(;b-c;)f[b++]=a/5; for(;d=0,g=c*2;c-=14,printf("%.4ld",e+d/a),e=d%a) for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);}
Source:http://www.yann-ollivier.org/pi/pi.php
Le code qui marche : j'ai vérifié les 200 premières décimales
Code : Tout sélectionner
#include <stdio.h>
long a=10000,b=0,c=8400,d,e=0,f[8401],g;
int main(){
for(;b-c;)f[b++]=a/5;
for( ; d=0,g=c*2 ; c-=14,printf("%.4ld",e+d/a),e=d%a)
for(b=c ; d+=f[b]*a,f[b]=d%--g,d/=g--,--b ; d*=b);
return 0;
}
ignorance is bliss
TI 57 II, TI 66, casio fx7500g, HP48GX, HP49G+, HP200LX, palm m125, Sharp PC-G850VS, HP12C
TI 57 II, TI 66, casio fx7500g, HP48GX, HP49G+, HP200LX, palm m125, Sharp PC-G850VS, HP12C
Re: Misez P'tit, Optimisez n°14 - une approximation de PI
Voici ma version HP50g NewRpl pour calculer instantanément PI jusque 2000 décimales
Usage : Taper le nombre de décimales souhaités (<=2000) et lancer le programme
Temps de calcul : instantané
Code : Tout sélectionner
« SETPREC π NUM→ »
Temps de calcul : instantané
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: Misez P'tit, Optimisez n°14 - une approximation de PI
Traduction pour la HP-Prime du programme écrit à l'origine en C. On arrive à 2858 décimales exactes en prenant m = 2857 (Fichier hpprgm à récupérer ici)
Et traduction pour la HP-50g (relativement rapide pour 100 ou 200 décimales avec l'émulateur emu48 mais super lent sur une vraie machine) :
Code : Tout sélectionner
EXPORT digitsPi(m)
BEGIN
LOCAL n := ip(m / 2 * 7);
LOCAL r, c, a, k, d, u, b, v;
LOCAL x := 0, y := 0;
r := MAKELIST(2000, k, 1, n);
r(n) := 0;
RECT();
c := 0;
a := 10000;
FOR k FROM n DOWNTO 1 STEP 14 DO
d := 0;
FOR u FROM k DOWNTO 1 STEP 1 DO
d := d + r(u) * a;
b := 2 * u - 1;
r(u) := d MOD b;
d := ip(d / b);
v := d;
d := d * (u - 1);
END;
q := "000" + STRING(c + ip(v / a));
TEXTOUT_P(q(length(q)-3,4),x,y);
x := x + 35;
IF x > 300 THEN
x := 0;
y := y +15;
END;
IF y > 230 THEN
WHILE NOT(ISKEYDOWN(12)) DO END;
x := 0;
y := 0;
RECT();
END;
c := v MOD a;
END;
WHILE NOT(ISKEYDOWN(12)) DO END;
RETURN;
END;
Et traduction pour la HP-50g (relativement rapide pour 100 ou 200 décimales avec l'émulateur emu48 mais super lent sur une vraie machine) :
Code : Tout sélectionner
« 3.5 * IP DUP DUP { } +
2000 CON SWAP 0 PUT
10000. → n r a
« 0 n 1
FOR k 0 k 1
FOR u r u GET
a * + u 2 * 1 - IDIV2 r u
ROT PUT 'r' STO
u 1 > « u 1 - * » IFT
-1 STEP
DUP a / IP ROT + R→I →STR
WHILE DUP SIZE 4 <
REPEAT "0" SWAP +
END MSGBOX
a MOD
-14 STEP
»
» 'DP STO
100 DP affiche 3141 au bout d'environ 1 min 30 s puis attendre encore 1 min 25 s etc.