Accueil > > > CALCUL DE PI
CALCUL DE PI
Information sur la source
Description
Calcul approximatif du nombre PI suivant ces différentes méthodes : 1 : Par la formule de Madhava-Leibniz 2 : Par la formule de Wallis 3 : Par la formule de Viete 4 : Par la suite de Leibniz 5 : Par l'algorithme de Salamin et Brent 6 : Par la formule BBP
Source
- #include <iostream>
- #include <cstdlib>
- #include <ctime>
- #include <cmath>
- #include <vector>
-
-
- using namespace std;
- double MoinsUnPuissanceN(const long unsigned int n);
-
- inline double MoinsUnPuissanceN(const long unsigned int n)
- {
- return (n&1) ? -1 : 1;
- }
-
-
- long double Process_Wallis(long unsigned int iterations)
- {
- long double retour=1.0;
-
- for (long unsigned int i=1; i<=iterations; i++)
- {
- retour*=(long double)(1.0-1.0/(pow((2.0*i+1.0),2)));
- }
- return retour*4;
-
- }
-
- void Wallis()
- {
- long unsigned int iterations;
- time_t temps;
-
-
- cout<<endl<<"Nombre d'iterations : ";
- cin>>iterations;
- temps=time(NULL);
- cout<<endl<<"Valeur approchée de PI : "<< Process_Wallis(iterations)<<endl;
- cout<<"en "<<time(NULL)-temps<<" secondes"<<endl;
-
- }
- long double Process_MadhavaLeibniz(long unsigned int iterations)
- {
- long double retour=0;
-
- for (long unsigned int i=0; i<=iterations;i++)
- {
- retour+=(long double)(MoinsUnPuissanceN(i)/(2*i+1));
- }
-
- return retour*4;
-
- }
-
- void MadhavaLeibniz()
- {
- long unsigned int iterations;
- time_t temps;
-
-
- cout<<endl<<"Nombre d'iterations : ";
- cin>>iterations;
- temps=time(NULL);
- cout<<endl<<"Valeur approchée de PI : "<< Process_MadhavaLeibniz(iterations)<<endl;
- cout<<"en "<<time(NULL)-temps<<" secondes"<<endl;
- }
-
- long double Process_viete(long unsigned int iterations)
- {
- long double retour, encours;
- retour=2*(2/sqrt(2));
- encours=sqrt(2);
- for (long unsigned int i=1; i<=iterations;i++)
- {
- encours=sqrt(2+encours);
- retour*=(2/encours);
- }
- return retour;
- }
-
- void Viete()
- {
- long unsigned int iterations;
- time_t temps;
-
-
- cout<<endl<<"Nombre d'iterations : ";
- cin>>iterations;
- temps=time(NULL);
- cout<<endl<<"Valeur approchée de PI : "<< Process_viete(iterations)<<endl;
- cout<<"en "<<time(NULL)-temps<<" secondes"<<endl;
- }
-
- long double Process_SuiteLeibniz(long unsigned int iterations)
- {
- vector<long double> Vecteur1(iterations*2+1,0);
- vector<vector<long double> > Vecteur2(iterations*2+1,Vecteur1);
-
- for (long unsigned int j=1;j<Vecteur2.size();j++)
- {
-
- Vecteur2[0][j]=Process_MadhavaLeibniz(j);
- }
-
- for (long unsigned int i=1; i<Vecteur1.size();i++)
- {
-
- for (long unsigned int j=1;j<Vecteur2.size();j++)
- {
- Vecteur2[i][j]=(Vecteur2[i-1][j]+Vecteur2[i-1][j+1])/2;
- }
-
- }
-
- return Vecteur2[iterations][iterations];
-
- }
-
- void SuiteLeibniz()
- {
- long unsigned int iterations;
- time_t temps;
-
- cout<<endl<<"Nombre d'iterations : ";
- cin>>iterations;
- temps=time(NULL);
- cout<<endl<<"Valeur approchée de PI : "<< Process_SuiteLeibniz(iterations)<<endl;
- cout<<"en "<<time(NULL)-temps<<" secondes"<<endl;
- }
-
- long double Process_Salamin_Brent(long unsigned int iterations)
- {
- long double a0=1, b0=1/sqrt(2), t0=0.25, p0=1;
- long double an, bn, tn, pn;
- long double retour;
-
- for (long unsigned int i=0; i<=iterations; i++)
- {
- an=(a0+b0)/2;
- bn=sqrt(a0*b0);
- tn=t0-pow((a0-an),2)*p0;
- pn=2*p0;
-
- a0=an;
- b0=bn;
- t0=tn;
- p0=pn;
- }
- retour=pow((an+bn),2)/(4*tn);
-
- return retour;
-
- }
-
- void Algo_Salamin_Brent()
- {
- long unsigned int iterations;
- time_t temps;
-
- cout<<endl<<"Nombre d'iterations : ";
- cin>>iterations;
- temps=time(NULL);
- cout<<endl<<"Valeur approchée de PI : "<< Process_Salamin_Brent(iterations)<<endl;
- cout<<"en "<<time(NULL)-temps<<" secondes"<<endl;
- }
-
- long double Process_BBP(long unsigned int iterations)
- {
- long double retour=0;
-
- for (long unsigned int i=0; i<=iterations; i++)
- {
- long double ajout;
-
- ajout=(long double)((4.0/(8.0*i+1.0))-(2.0/(8.0*i+4.0))-(1.0/(8.0*i+5.0))-(1.0/(8.0*i+6.0)));
- ajout*=(long double)(1.0/pow(16.0,i));
- retour+=ajout;
- }
-
- return retour;
-
- }
-
- void BBP()
- {
- long unsigned int iterations;
- time_t temps;
-
- cout<<endl<<"Nombre d'iterations : ";
- cin>>iterations;
- temps=time(NULL);
- cout<<endl<<"Valeur approchée de PI : "<< Process_BBP(iterations)<<endl;
- cout<<"en "<<time(NULL)-temps<<" secondes"<<endl;
-
- }
-
- int main(void)
- {
- int choix;
-
- cout.precision(15);
-
- do
- {
- cout<<endl<<"Calcul du nombre PI par différentes méthodes"<<endl<<endl;
- cout<<"1 : Par la formule de Madhava-Leibniz"<<endl;
- cout<<"2 : Par la formule de Wallis"<<endl;
- cout<<"3 : Par la formule de Viete"<<endl;
- cout<<"4 : Par la suite de Leibniz"<<endl;
- cout<<"5 : Par l'algorithme de Salamin et Brent"<<endl;
- cout<<"6 : Par la formule BBP"<<endl;
- cout<<"0 : Arret du programme"<<endl;
- cout<<endl<<"Votre choix ?"<<endl;
- cin>>choix;
-
- switch (choix)
- {
- case 2:
- Wallis();
- break;
- case 1:
- MadhavaLeibniz();
- break;
- case 3:
- Viete();
- break;
- case 4:
- SuiteLeibniz();
- break;
- case 5:
- Algo_Salamin_Brent();
- break;
- case 6:
- BBP();
- break;
- }
-
- }
- while (choix!=0);
-
-
- return EXIT_SUCCESS;
- }
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <vector>
using namespace std;
double MoinsUnPuissanceN(const long unsigned int n);
inline double MoinsUnPuissanceN(const long unsigned int n)
{
return (n&1) ? -1 : 1;
}
long double Process_Wallis(long unsigned int iterations)
{
long double retour=1.0;
for (long unsigned int i=1; i<=iterations; i++)
{
retour*=(long double)(1.0-1.0/(pow((2.0*i+1.0),2)));
}
return retour*4;
}
void Wallis()
{
long unsigned int iterations;
time_t temps;
cout<<endl<<"Nombre d'iterations : ";
cin>>iterations;
temps=time(NULL);
cout<<endl<<"Valeur approchée de PI : "<< Process_Wallis(iterations)<<endl;
cout<<"en "<<time(NULL)-temps<<" secondes"<<endl;
}
long double Process_MadhavaLeibniz(long unsigned int iterations)
{
long double retour=0;
for (long unsigned int i=0; i<=iterations;i++)
{
retour+=(long double)(MoinsUnPuissanceN(i)/(2*i+1));
}
return retour*4;
}
void MadhavaLeibniz()
{
long unsigned int iterations;
time_t temps;
cout<<endl<<"Nombre d'iterations : ";
cin>>iterations;
temps=time(NULL);
cout<<endl<<"Valeur approchée de PI : "<< Process_MadhavaLeibniz(iterations)<<endl;
cout<<"en "<<time(NULL)-temps<<" secondes"<<endl;
}
long double Process_viete(long unsigned int iterations)
{
long double retour, encours;
retour=2*(2/sqrt(2));
encours=sqrt(2);
for (long unsigned int i=1; i<=iterations;i++)
{
encours=sqrt(2+encours);
retour*=(2/encours);
}
return retour;
}
void Viete()
{
long unsigned int iterations;
time_t temps;
cout<<endl<<"Nombre d'iterations : ";
cin>>iterations;
temps=time(NULL);
cout<<endl<<"Valeur approchée de PI : "<< Process_viete(iterations)<<endl;
cout<<"en "<<time(NULL)-temps<<" secondes"<<endl;
}
long double Process_SuiteLeibniz(long unsigned int iterations)
{
vector<long double> Vecteur1(iterations*2+1,0);
vector<vector<long double> > Vecteur2(iterations*2+1,Vecteur1);
for (long unsigned int j=1;j<Vecteur2.size();j++)
{
Vecteur2[0][j]=Process_MadhavaLeibniz(j);
}
for (long unsigned int i=1; i<Vecteur1.size();i++)
{
for (long unsigned int j=1;j<Vecteur2.size();j++)
{
Vecteur2[i][j]=(Vecteur2[i-1][j]+Vecteur2[i-1][j+1])/2;
}
}
return Vecteur2[iterations][iterations];
}
void SuiteLeibniz()
{
long unsigned int iterations;
time_t temps;
cout<<endl<<"Nombre d'iterations : ";
cin>>iterations;
temps=time(NULL);
cout<<endl<<"Valeur approchée de PI : "<< Process_SuiteLeibniz(iterations)<<endl;
cout<<"en "<<time(NULL)-temps<<" secondes"<<endl;
}
long double Process_Salamin_Brent(long unsigned int iterations)
{
long double a0=1, b0=1/sqrt(2), t0=0.25, p0=1;
long double an, bn, tn, pn;
long double retour;
for (long unsigned int i=0; i<=iterations; i++)
{
an=(a0+b0)/2;
bn=sqrt(a0*b0);
tn=t0-pow((a0-an),2)*p0;
pn=2*p0;
a0=an;
b0=bn;
t0=tn;
p0=pn;
}
retour=pow((an+bn),2)/(4*tn);
return retour;
}
void Algo_Salamin_Brent()
{
long unsigned int iterations;
time_t temps;
cout<<endl<<"Nombre d'iterations : ";
cin>>iterations;
temps=time(NULL);
cout<<endl<<"Valeur approchée de PI : "<< Process_Salamin_Brent(iterations)<<endl;
cout<<"en "<<time(NULL)-temps<<" secondes"<<endl;
}
long double Process_BBP(long unsigned int iterations)
{
long double retour=0;
for (long unsigned int i=0; i<=iterations; i++)
{
long double ajout;
ajout=(long double)((4.0/(8.0*i+1.0))-(2.0/(8.0*i+4.0))-(1.0/(8.0*i+5.0))-(1.0/(8.0*i+6.0)));
ajout*=(long double)(1.0/pow(16.0,i));
retour+=ajout;
}
return retour;
}
void BBP()
{
long unsigned int iterations;
time_t temps;
cout<<endl<<"Nombre d'iterations : ";
cin>>iterations;
temps=time(NULL);
cout<<endl<<"Valeur approchée de PI : "<< Process_BBP(iterations)<<endl;
cout<<"en "<<time(NULL)-temps<<" secondes"<<endl;
}
int main(void)
{
int choix;
cout.precision(15);
do
{
cout<<endl<<"Calcul du nombre PI par différentes méthodes"<<endl<<endl;
cout<<"1 : Par la formule de Madhava-Leibniz"<<endl;
cout<<"2 : Par la formule de Wallis"<<endl;
cout<<"3 : Par la formule de Viete"<<endl;
cout<<"4 : Par la suite de Leibniz"<<endl;
cout<<"5 : Par l'algorithme de Salamin et Brent"<<endl;
cout<<"6 : Par la formule BBP"<<endl;
cout<<"0 : Arret du programme"<<endl;
cout<<endl<<"Votre choix ?"<<endl;
cin>>choix;
switch (choix)
{
case 2:
Wallis();
break;
case 1:
MadhavaLeibniz();
break;
case 3:
Viete();
break;
case 4:
SuiteLeibniz();
break;
case 5:
Algo_Salamin_Brent();
break;
case 6:
BBP();
break;
}
}
while (choix!=0);
return EXIT_SUCCESS;
}
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Pseudo code avec problème :( (urgent) [ par cardi ]
Mon poste ressemble un peu à celui de Goschan... Voici mon pseudo code pour faire un déplacement positif dans un vecteur d'entiers avec les pointeurs:
C ANSI allocation dynamique de tableau [ par pedu ]
Ce petit pro beug en sortie, pourquoi et que faire ?#include <stdio.h>#include <stdlib.h>int (*pi)[1][1]; /* pointeur sur un tableau d'e
Symbole de PI [ par boun85 ]
J'aimerai savoir comment faire pour afficher le symbole de PI à l'écran?Merci d'avance
lecture fichier texte [ par amin79 ]
Mon problème est de lire le fichier texte ci-joint et de mettre dans des tabkeaux int chaque colonne (ri, pi, di et yi) et une martrice int qui contie
Probleme fonction creta process [ par morgandetoi06 ]
bonjour, je suis en train de faire un installeur de patch correctifs winXPmais je n arrive pas à lancer mes patch en leur passant les parametres "-q -
passage d'argement chaine [ par victorcoasne ]
Je fais :int taille(char chaine[]){ cout << chaine << endl; return (sizeof(chaine)/sizeof(chaine[0])); }int main(){char
Je débute ... premiere interrogation [ par rapapar ]
salutC'est une question à 2balles...Je suis coincé dans visual .net...mais comment faire pour trouver une solution à part en supprimant les commentair
Pb d'impression [ par cecel ]
SalutJe devellope une appli qui permet d'imprimer des etiquettes sur une imprimante ZEBRA.J'utilise un driver "Generic text" car j'imprime un fichier
CreateProcess [ par vecchio56 ]
Salut,J'ai une petite question dont la réponse est sans doute dans la MSDN mais c'est vraiment long a lire alors avant de commencer je tente le coup i
CreatePorcess + App 16-bits [ par vecchio56 ]
BonjourJ'éxécute une application 16-bits avec CreateProcess mais je n'arrive pas à récupérer ce qu'il y a dans stdout. Le problème c'est que le même c
|
Derniers Blogs
INTéGRATION YAMMER ET SHAREPOINT ONLINE (OFFICE 365), éTAPE 1 .INTéGRATION YAMMER ET SHAREPOINT ONLINE (OFFICE 365), éTAPE 1 . par Patrick Guimonet
#Yammer Certains s'en sont déjà fait l'écho (ici en allemand par exemple : Yammer Integration in Office 365 Phase 1) ou bien sûr sur le blog SharePoint : Make Yammer your default social network in Office 365 en anglais. Mais c'e...
Cliquez pour lire la suite de l'article par Patrick Guimonet [DYNAMICS CRM] AJOUTER LES DOSSIERS DE CRM AU DOSSIER FAVORIS D'OUTLOOK[DYNAMICS CRM] AJOUTER LES DOSSIERS DE CRM AU DOSSIER FAVORIS D'OUTLOOK par bianca
Objectif
Pour aller plus rapidement dans les menus de Dynamics CRM depuis votre client CRM pour Outlook, vous pouvez utiliser le dossier des Favoris d'Outlook. En effet, par simple glisser/déplacer, vous pouvez déposer un éléme...
Cliquez pour lire la suite de l'article par bianca VISUAL STUDIO 2013VISUAL STUDIO 2013 par Etienne Margraff
Ahh, ENFIN ! c'est officiel, il va y avoir un VS et un TFS 2013. De nouvelles fonctionnalités qui vont à mon sens assoir la maturité de TFS qui est maintenant l'outil incontournable pour tout projet (.NET, mais pas seulement !). Si vous n'avez pas jet...
Cliquez pour lire la suite de l'article par Etienne Margraff CONFIGURER LA COLLATION SQL SERVER POUR SHAREPOINT CONFIGURER LA COLLATION SQL SERVER POUR SHAREPOINT par JeremyJeanson
Note : Je poste cet article à titre de pense-bête. Cela fait des années que je me trimballe avec une capture d'écran, car je ne me rappel jamais comment choisir la collation d'un SQL Server pour SharePoint. Pour SharePoint, il est conseillé de choisir la ...
Cliquez pour lire la suite de l'article par JeremyJeanson ETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 1: CRéATION DU PLUGINETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 1: CRéATION DU PLUGIN par Philess
Dans cet article nous allons créer un plugin installable sur le Team Web Access qui s'intègrera dans l'architecture du site et se chargera au moment où on le décidera.
Avant de lire ce billet et si cela n'est pas encore fait j...
Cliquez pour lire la suite de l'article par Philess
Logiciels
Nego Facturation (1.85)NEGO FACTURATION (1.85)Nego Facturation est un logiciel complet qui permet de gérer vos factures et devis très simplemen... Cliquez pour télécharger Nego Facturation Devis-Factures PHMSD (2.2.0.1)DEVIS-FACTURES PHMSD (2.2.0.1)Configuration minimale
Nécessite Windows™ 2000, XP, Windows 7, 8, Vista (Service Pack à... Cliquez pour télécharger Devis-Factures PHMSD WDmemoCode (2.0.0.1)WDMEMOCODE (2.0.0.1)WDmemoCode a été conçu pour aider les développeurs Windev à créer/compléter et conserver une base... Cliquez pour télécharger WDmemoCode ProtoMedic (4.0.0.11)PROTOMEDIC (4.0.0.11)ProtoMedic est un logiciel destiné principalement aux médecins généralistes.
ProtoMedic permet d... Cliquez pour télécharger ProtoMedic MyCurriculum 2011 (7.4.1.12)MYCURRICULUM 2011 (7.4.1.12)Rédigez votre Curriculum Vitae mais également ceux de votre famille ou de vos amis très facilemen... Cliquez pour télécharger MyCurriculum 2011
|