pi.exe a cessé de fonctionner - quel est le problème ?

pi.exe a cessé de fonctionner - quel est le problème ? - C++ - Programmation

Marsh Posté le 20-12-2008 à 12:33:27    

Bonjour,  
je n'y connais pas grand-chose en c++, et je bute sur une erreur.
Mon tout petit programme, censé calculer pi selon une précision passée en paramètre, compile mais son exécution est stoppée dès l'appel de la fonction get_pi : pi.exe a cessé de fonctionner, etc...
 
Voici mon code :
 

Code :
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. float var;
  6.  
  7. float get_pi(int precision) {
  8.    float pi = 0;
  9.    float tmp = 0;
  10.  
  11.    for(int i = 0; i <= precision; i += 4) {
  12.        tmp += 1/(i*(i+2));
  13.    }
  14.  
  15.    pi = 8 * tmp;
  16.    return pi;
  17. }
  18.  
  19. float get_pi(int precision) ;
  20.  
  21. int main()
  22. {
  23.    cout << "salut" << get_pi(5);
  24.    return 0;
  25. }

Reply

Marsh Posté le 20-12-2008 à 12:33:27   

Reply

Marsh Posté le 20-12-2008 à 12:53:18    

meme dans n'importe quel langage on se rend compte tout de suite de ton erreur :  
 

Code :
  1. for(int i = 0; i <= precision; i += 4) {
  2.            tmp += 1/(i*(i+2));
  3.        }


Au tout départ, i=0;
et donc ton calcul :  
1/(i*(i+2))
est merdique :  
1/(0*2)
1/0
 
En math on nous a toujours appris que la division par 0 était impossible.
 
Tu devrais mieux lire les erreurs que te retourne le programme

Reply

Marsh Posté le 20-12-2008 à 15:07:34    

Ok, je n'y pensais même pas.
Comment voir les messages retournés par le programme ? il n'affichait rien et se fermait immédiatement et le debugger est vide :(
J'ai du loupé quelque chose :(
Merci beaucoup en tout cas :)
D'ailleurs maintenant, le programme affiche zéro : (cout << get_pi(10000)

Reply

Marsh Posté le 20-12-2008 à 17:51:32    

:bounce:

Reply

Marsh Posté le 21-12-2008 à 19:17:12    

j'apporte des précisions : le programme retourne zéro.
J'ai testé différentes choses mais je ne trouve toujours pas.
On dirait que tmp vaut 0 à la sortie de for()
Voici le code :  
 

Code :
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. float var;
  6.  
  7. float get_pi(int precision) {
  8.    float pi = 0;
  9.    float tmp = 0;
  10.  
  11.    for(int i = 1; i <= precision; i += 4) {
  12.        tmp += 1/(i*(i+2));
  13.    }
  14.  
  15.    pi = 8 * tmp;
  16.    return pi;
  17. }
  18.  
  19. float get_pi(int precision) ;
  20.  
  21. int main()
  22. {
  23.    var = get_pi(100);
  24.    cout << var ;
  25.    return 0;
  26. }

Reply

Marsh Posté le 21-12-2008 à 19:44:44    


Il vaut aussi 0 pendant l'execution du for.
hint : quel est le type des deux opérandes dans ta division ? Donc quel est le type du résultat de la division ?


Message édité par SquiZZ le 21-12-2008 à 19:45:00
Reply

Marsh Posté le 21-12-2008 à 19:53:28    

en fait, je dois obtenir :
 
1/(1*3), 1/(5*7), etc...
donc tmp = 1/(1*3) + 1(5*7) + 1/(9*11) etc.
 
Mais je ne sais pas quel est le type approprié :??:

Reply

Marsh Posté le 21-12-2008 à 20:07:57    

bon tu divises un entier par un entier, donc c'est une division entière, donc le résultat est un entier. Après tu le stockes dans un float mais c'est trop tard.
Hint² :

Code :
  1. 1./2


Message édité par SquiZZ le 21-12-2008 à 20:08:16
Reply

Marsh Posté le 21-12-2008 à 20:09:13    

Tu vas avoir du mal à chopper des précisions arbitraires de pi dans du float, ou du double d'ailleurs :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 21-12-2008 à 20:12:54    

Attends, pour l'intant pi vaut zéro :o


Message édité par SquiZZ le 21-12-2008 à 20:13:06
Reply

Marsh Posté le 21-12-2008 à 20:12:54   

Reply

Marsh Posté le 22-12-2008 à 17:59:11    


 
c'est marant parce qu'avant de faire cette fonction, j'ai lu ces deux pages  [:tinostar]


Message édité par Profil supprimé le 22-12-2008 à 17:59:19
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed