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
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 »

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."
Avatar du membre
badaze
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 8385
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 :Je me suis pris comme un PIed, c'est que tu pense?
PIre. :wink:
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 du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
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 »

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.
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

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

Message par Schraf »

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 :lol:

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
En savoir plus (lien vers l'article + autres méthodes de calculs)
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

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

Message par Schraf »

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.

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
Lien vers le fichier 8XP : https://uabox.univ-angers.fr/index.php/ ... 3uS3NJDjKj
Un bon départ...
Un bon départ...
Capturer 1.png (8.52 Kio) Vu 4128 fois
"348" doit se lire "0348" sur 4 chiffres
"348" doit se lire "0348" sur 4 chiffres
Capturer 3.png (8.37 Kio) Vu 4128 fois
Version Python sur la Ti-83 (environ 10 secondes)
Version Python sur la Ti-83 (environ 10 secondes)
Capturer 2.png (22.79 Kio) Vu 4126 fois
Avatar du membre
fred260571
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 362
Enregistré le : 19 avr. 2016 13:10
Localisation : Toulouse

Re: Optimiser - une approximation de PI

Message par fred260571 »

jvernet a écrit : 24 janv. 2012 13:41

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);} 
2400 décimales de PI juste (il parait).

Source:http://www.yann-ollivier.org/pi/pi.php
Le soucis c'est qu'il n'initialise pas les variables "b" et "e" donc il y a des nombres random dans b et e

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
Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1602
Enregistré le : 27 oct. 2010 20:46

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

Message par Gilles59 »

Voici ma version HP50g NewRpl pour calculer instantanément PI jusque 2000 décimales :twisted:

Code : Tout sélectionner

 «  SETPREC π NUM→ » 
Usage : Taper le nombre de décimales souhaités (<=2000) et lancer le programme
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
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

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

Message par Schraf »

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)

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;
Flèche vers le bas pour passer à l'écran suivant
Flèche vers le bas pour passer à l'écran suivant
decimales.jpg (48.78 Kio) Vu 48 fois

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.
4 décimales toutes les 1 min 30 environ
4 décimales toutes les 1 min 30 environ
HP50g.png (5.47 Kio) Vu 48 fois
Répondre

Retourner vers « Tous les Pockets »