[gelöst] Pi Annäherung nach Leibniz

Hey. Also ich hab in der Schule Informatik als WPU Kurs. Wir haben da jetzt in der letzten Stunde so ein Progrämmchen geschrieben, dass eigentlich einen Wert zurückliefern sollte der möglichst nah an Pi rankommt.
Es hat auch irgendwann mal geklappt und meine aktuelle Version nähert sich zwar, aber nicht an Pi. :(
Ich rätsel jetzt mal weiter, wenn jemand weiß woran das liegen könnte, oder wenn jemand nur eine Idee hat bitte bescheid sagen. *g*

Code:
PROGRAM Pi_leibniz_std15;
USES CRT;

VAR reihe,tempreihe:REAL;
VAR temp,nenner:LONGINT;

BEGIN
  CLRSCR;

  temp := 0;
  reihe := 1;
  nenner := 1;

    REPEAT
      temp:=temp+1;
      nenner := nenner+2;

      IF (temp MOD 2) = 0 THEN
       BEGIN { + }
         tempreihe := reihe;
         reihe := reihe+(1/nenner);
       END
      ELSE { - }
        reihe := reihe-(1/nenner);

    UNTIL (ABS(reihe)-ABS(tempreihe))< 0.00001;

    WRITE(reihe);

  READLN;
END.

Grüße
 
Ich denk du hast Leibnitz's Intention falsch realisiert :^) Also nochmal von vorne; Leibnitz hat diese Formel aufgestellt:

cdc7391a8727e3d5579e589zh5.png


Und selbst dies führt nur bist zu PI/4, also 0,78..., also nicht irritieren lassen. Ich denke (sorry, ich habe noch nie mit Pascal gearbeitet) deine Code wäre gegen 1,25 konvergiert, du hast da wohl irgendwas falsch verstanden oder falsch implementiert. Hier ist mal meine Version (ich hab deinen Code genommen und einfach spontan reingekritzelt wie ich es machen würde; musst den Code also syntaxmäßig auf Vordermann bringen :-P), 3 Variablen; weiß aber natürlich auch nicht ob ich es richtig gemacht habe:

Code:
temp=0
erg=0

REPEAT
nenner:=2*temp+1

IF(temp MOD 2)=0 OR temp=0
erg=erg+1/nenner
ELSE
erg=erg-1/nenner

temp+=1
UNTIL ...

Ich bin da mal ratz fatz mit Bleistift und Papier jeden Schritt durchgegangen und konnte soweit keine (mathematischen) Fehler in dem "Algorithmus" finden. Und nicht vergessen... PI/4
 
Danke für die Antworten.
Besonders wichtig war
Und nicht vergessen... PI/4
Das ist ja garnicht mal so unwesentlich. o.O

Ich hab jetzt in der Ausgabe ein * 4 ergänzt, jetzt klappts. *gg*
Code:
PROGRAM Pi_leibniz_std15;
USES CRT;

VAR reihe,tempreihe:REAL;
VAR temp,nenner:LONGINT;

BEGIN
  CLRSCR;

  temp := 0;
  reihe := 1;
  nenner := 1;

    REPEAT
      temp := temp+1;
      nenner := nenner+2;

      IF (temp MOD 2) = 0 THEN
       BEGIN { + }
         tempreihe := reihe;
         reihe := reihe+(1/nenner);
       END
      ELSE { - }
        reihe := reihe-(1/nenner);

    UNTIL (ABS(reihe)-ABS(tempreihe))<0.00001;
    WRITE(reihe*4);

  READLN;
END.

Grüße und Danke für die Beiträge. :)
 
Zurück
Oben