2016-10-11 7 views
1

Ich bin ein Anfänger bei C++ und Codierung selbst, also bitte verzeihen Sie alle Vokabeln Pannen. Ich konnte diese spezifische Frage nicht finden, aber ähnliche im Internet, aber es fällt mir immer noch schwer, ein Ergebnis zu bekommen, das ich brauche.C++ Pi Approximation mit Leibniz-Formel

Ich bin mit der Leibniz-Formel So pi annähert, das ist:

pi = 4 · [1 - 1/3 + 1/5 - 1/7 + 1/9 ... + (-1^n)/(2n + 1)].

Ich habe eine compilable and runnable program geschrieben, aber der Hauptteil des Codes, der mich bedrückt ist:

if (terms > 0){ 

     double partial = 0; 

     for (i = 0; i < terms; i++) 
      if (i % 2 == 0) 
       partial -= (pow(-1,terms))/((2.0 * i) + 1); 
      else 
       partial += (pow(-1,terms))/((2.0 * i) + 1); 

     double newPi = 4 * partial; 

     cout << "The approximation is " << newPi << " using " << terms << " terms.\n"; 

} 

Wenn Begriffe = 3, die Annäherung = 2,895

Wenn Begriffe = 10, die Näherung = 3,232

Wenn Begriffe = 50, die Annäherung = 3,161

ich bin keine dieser Zahlen zu bekommen. Ich habe allerdings bemerkt, dass wenn ich eine ungerade Zahl einstelle, bekomme ich eine negative und umgekehrt mit geraden Zahlen. Alles, was ich in meinem Programm geschrieben habe, ist alles, was ich bisher in meiner Klasse gelernt habe, also kann ich nicht wirklich aus dem Rahmen gehen, in dem ich geschrieben habe. Jede Hilfe oder Erklärung wäre willkommen.

Antwort

4

Sie haben ein if/else, um das Zeichen zu bestimmen, aber dann tun Sie auch pow(-1, terms). Ich würde nur die pow loswerden und sie durch 1 ersetzen, da Sie bereits partial += und partial -= abhängig davon tun, ob i ungerade oder gerade ist. Außerdem denke ich, dass deine += und -= genau andersherum sein sollten.

0

Versuchen Sie folgendes:

if (terms > 0){ 
    double partial = 0; 
    for (i = 0; i <= terms; i++) 
     partial += pow(-1,i)/(2.0 * i + 1); 
    double newPi = 4 * partial; 
    cout << "The approximation is " << newPi << " using " << terms << " terms.\n"; 
} 
Verwandte Themen