Calculer pi

Résolu/Fermé
CyRux Messages postés 164 Date d'inscription dimanche 4 janvier 2015 Statut Membre Dernière intervention 8 septembre 2016 - 14 mai 2015 à 14:33
CyRux Messages postés 164 Date d'inscription dimanche 4 janvier 2015 Statut Membre Dernière intervention 8 septembre 2016 - 23 mai 2015 à 21:21
Bonjour a tous,
voila j'aimerai faire un programme qui calcule pi ... je me suis donc basé sur cet algorithme : ? = (4/1) - (4/3) + (4/5) - (4/7) + (4/9) - (4/11) + (4/13) - (4/15)...
et j'ai donc créer ce code
#include <stdio.h>

int main ()
{
int b = 1;
float pi = 4 / b;
int i;
for (i=0; i < 10; i++)
{
b = b + 2;
pi = pi - 4 / b;
printf ("%f", pi);
b += 2;
pi = pi + 4 / b;
printf ("%f", pi);
}
return 0;
}

mais sa me donne "3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000 3.00000"
Merci d'avance

ps : je débute en C

1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
Modifié par fiddy le 14/05/2015 à 15:02
Bonjour,

Alors tout d'abord, je te conseille d'utiliser des double plutôt que des float.

b = b + 2; et b+=2;
Autant mettre la même instruction pour uniformiser ;-).

Et sinon, l'erreur : pi = pi - 4 / b;
4/b est une division de deux entiers. En C, une telle division renvoie la partie entière (donc 0). Pi vaudra donc 4-1-0-0...=3.
Mets plutôt : pi=pi-4.f/b; (si tu travailles en float) ou pi=pi-4./b; (si t'es passé en double).
N'oublie pas de modifier aussi pour : pi=pi+4/b;

Cdlt,

Google is your friend
0
CyRux Messages postés 164 Date d'inscription dimanche 4 janvier 2015 Statut Membre Dernière intervention 8 septembre 2016 3
14 mai 2015 à 15:37
Merci beaucoup sa marche sa marche, je suis resté en float, car en double sa marchais pas (gcc me signalais une erreur)
le seul problème c est que mon resultat n'a que 6 nombres après la virgule ...
j'ai donc penser a le multiplier par 10000000000000[...]000 mais je ne sais pas comment faire pour que mon resultat soit juste ...
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
14 mai 2015 à 15:51
Si gcc te signale une erreur, c'est qu'il y a quelque chose à corriger ;-).
N'hésite pas à poster ton code avec la version double ainsi que les erreurs signalés par gcc pour qu'on puisse voir d'où vient le problème.

le seul problème c est que mon resultat n'a que 6 nombres après la virgule ...
Non, resultat a bien plus de chiffres après la virgule. Mais tu demandes l'affichage de seulement 6 chiffres après la virgule (par défaut).
Si tu en veux 10 : printf("%.10f\n", pi);
Note : n'oublie pas de mettre un caractère séparateur pour que ça soit plus lisible.

Cdlt,
0
CyRux Messages postés 164 Date d'inscription dimanche 4 janvier 2015 Statut Membre Dernière intervention 8 septembre 2016 3 > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
23 mai 2015 à 21:21
C'est bon sa marche ^^ Merci beaucoup
pour info voici le code final :
#include <stdio.h>

int main ()
{
int b = 1;
double pi = 4 / b;
int i;
for (i=0; i < 1000000; i++)
{
b += 2;
pi = pi - 4./b;
printf ("%.200f\n", pi);
b += 2;
pi = pi + 4./b;
printf ("%.200f\n", pi);
}
return 0;
}

mais le seul problème c'est que l'algorithme que j'ai utilisé n'est pas très bon ... il faut 1 000 000 de calcul pour avoir 5 décimales de bonnes ...

ps : Désolé pour le temps de réponse mais je n'était pas chez moi ...
0