PI

cmarsc Messages postés 455 Date d'inscription mercredi 6 mars 2002 Statut Membre Dernière intervention 18 décembre 2003 - 27 mars 2003 à 09:17
Super_Mat Messages postés 37 Date d'inscription jeudi 2 septembre 2004 Statut Membre Dernière intervention 31 août 2005 - 23 sept. 2004 à 21:34
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/10591-pi

Super_Mat Messages postés 37 Date d'inscription jeudi 2 septembre 2004 Statut Membre Dernière intervention 31 août 2005
23 sept. 2004 à 21:34
7 décimales en 200.000.000 d'itération c'est pas fameux quand même :-)

Une des méthodes des plus rapides est celle de Bailey-Borwein-Plouffe (BBP) je pense. A chaque itération on trouve un chiffre exacte supplémentaire.

Je crois que je vais utiliser celle-ci pour ma bibliothèque des nombres formels.
knutzz Messages postés 1 Date d'inscription jeudi 6 février 2003 Statut Membre Dernière intervention 2 avril 2003
2 avril 2003 à 10:51
Histoire de bourrer un peu plus pour les amateurs de décimales.
On déroule la boucle, plus il y a de CALC et plus % CPU utilisé par la boucle et le print diminue.


#define CALC somme += (1./(long double)n);
n = n + 2;
somme -= (1./(long double)n);
n = n + 2;

int main(int argc, char* argv[])
{
signed int signe = 1;
long double somme = 0;
int n = 1;

do
{
CALC
CALC
printf("%.20f %i
",4.*somme,n);
}
while(1);
return 0;
}
cs_aerith Messages postés 54 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 12 mars 2006
28 mars 2003 à 12:40
cmarsc :
-oki pour le .h
-je pense que si je mes une condition d'arret par une touche ca devrai ralentir le programme, c'est si important que ca de cloturer le prog ?
-et heu question vitesse ce prog utilise 15% max de mes ressource et c'est illisible en effet

zanidip :
je me suis renseigner et a essayer la methode d'archimed par les poligone regulier mais pas reussi a sortir un resultat bon si j'y arrive je posterai ca ici

-j'ai trouver le record, un certain gars a tokio avec 51 milliards de decimales
-je vais tenter de metre un timer pour savoir le nombre d'iteration en combien de temp qu'on a fais
cmarsc Messages postés 455 Date d'inscription mercredi 6 mars 2002 Statut Membre Dernière intervention 18 décembre 2003
28 mars 2003 à 07:12
salut,
on utilise " .h" par exemple "fichier_perso.h" pour les fichiers que l'on a écrit nous même et <.h> pour les fichiers disponibles avec le compilateurs c'est notamment le cas des bibliothèques standard.

avec une boucle infinie il n'y a pas de condition d'arrêt et on ne peut donc pas mettre fin à l'exécution du programme proprement (ESCAPE).
et pour la vitesse chez moi c'est trop rapide c'est pour cela que j'ai ajouté une boucle for(...) question de machine sans doute ;-)
Viper31 Messages postés 96 Date d'inscription mardi 2 avril 2002 Statut Membre Dernière intervention 7 août 2005
27 mars 2003 à 17:27
Ya encore plus simple , mais ca n engage que moi :
...
#include <math.h>
...
...
float le_vrai_pi;
le_vrai_pi = 4.0*atan(1.0);
printf("%f",le_vrai_pi);
...
...

:) enfin c'est vrai que trouve un algo qui le calcul c toujours interessant ^^ ! mais bon :]
zanidip Messages postés 76 Date d'inscription lundi 30 septembre 2002 Statut Membre Dernière intervention 25 mars 2007
27 mars 2003 à 16:00
il y a d'autres moyens plus simple :
un systeme qui encadre pi en calculant les perimetre des polygone reguliés inscri dans le cercle a n cotés.
plus n est grand et plus le resultat sera preci!

c'est vrais qu'il est un peut lent ton prog!
cs_aerith Messages postés 54 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 12 mars 2006
27 mars 2003 à 13:00
-les " " son tout a fais autoriser
-la boucle infini c'est volontaire ca evite de fermer le programme par erreur
-conio est inutile ici
-et pourquoi ralentir le programme il est deja trop lent ?
cmarsc Messages postés 455 Date d'inscription mercredi 6 mars 2002 Statut Membre Dernière intervention 18 décembre 2003
27 mars 2003 à 09:18
salut,
#include <stdio.h> au lieu de #include "stdio.h"
la boucle do while(1) est infinie (pas de condition de sortie :-( ) kbhit est plus indiquée

#include <stdio.h>
#include <conio.h> // devc++4 <conio.c>

int main(void)
{
signed int signe = 1;
long double somme = 0;
int i;
int n = 1;
do
{
somme += signe*(1.0/(long double)n);
signe = -signe;
n += 2;
printf("%20.20f %i
",4.0*somme,n);

for (i =0; i< 5000;i++) { // ralentir
printf("%c",'a');
}
}
while(!kbhit());
return 0;
}
cmarsc Messages postés 455 Date d'inscription mercredi 6 mars 2002 Statut Membre Dernière intervention 18 décembre 2003
27 mars 2003 à 09:17
salut,
#include <stdio.h> au lieu de #include "stdio.h"
la boucle do while(1) est infinie (pas de condition de sortie :-( ) kbhit est plus indiquée

#include <stdio.h>
#include <conio.h> // devc++4 <conio.c>

int main(void)
{
signed int signe = 1;
long double somme = 0;
int i;
int n = 1;
do
{
somme += signe*(1.0/(long double)n);
signe = -signe;
n += 2;
printf("%20.20f %i
",4.0*somme,n);

for (i =0; i< 5000;i++) { // ralentir
printf("%c",'a');
}
}
while(!kbhit());
return 0;
}
Rejoignez-nous