Nachommastellen berechnen für Pi

Hallo an alle!
ich bin c++ Änfanger und habe eine Frage zur Berechnung von Pi. Ich möchte
ein Programm schreiben, welches mittels meiner Fuktion piBerechnen den Wert
von Pi berechnet. Soweit kein Problem. Nun soll der Benutzer des Programmes
eingeben können, auf wieviel Nachkommastellen genau er Pi berechnet haben
möchte. Hier kommt mein Problem:
Ich weiß nicht, wie ich dies Realisieren soll. Den „mathematischen“ Ansatz,
d.h. einfach überprüfen wann sich die z.B. 5 Stelle nicht mehr ändert ist
mir klar. Aber wie bekomme ich es in C++ hin, das er nach jedem
Schleifendurchlauf prüft, ob sich die (z.B.) 5 Stelle nach dem Komma noch
ändert?
Bei dem Programm kommt es mir nicht auf die Schnelligkeit an. Es soll
einfach mittels der Funktion piBerechnen wie oben beschrieben Pi berechnet
und dann mit den Kommastellen aus der Eingabe angezeigt werden.
Ich hoffe das Ihr / Sie mir helfen könnt.

Hier der Quellcode des Programms:

#include
#include
#pragma argsused

double summe, nachkomma, schritte, nenner, pi, ergebnis;

// -------------------------------------------------------------
// diese Funktion soll Pi solange berechnen, bis es den genauen
// Wer der Nachkommastellen hat
// -------------------------------------------------------------

long piBerechnen (long nachkomma)
{
/* Summe und Nenner initialisieren */
summe = 1;
nenner = 3;

/* Berechnen der Summe */
for (int i = 1; i > nachkomma;

ergebnis = piBerechnen(nachkomma);

/* Pi ausgeben */
cout

Entsprechend Deinem Programm veränderst Du in einer Schleife die Variable Summe , in dem Du den Kehrwert von Nenner addierst oder subtrahierst. Entsprechend ändert sich Summe bis zu einer definierten Nachkommastelle nicht mehr, wenn der Kehrwert von Nenner kleiner dieser Nachkommastelle ist.
Oder der Nenner grösser als die Zehnerpotenz von Nachkommastelle.
Also könnte Dein Programm so aussehen:

double piBerechnen (long nachkomma)
{
int nachkomma = 5;
/\* Summe und Nenner initialisieren \*/
float summe = 1;
float nenner = 3;
int schritte = 200;
int i=1;

/\* Berechnen der Summe \*/
do{
 if (i % 2)
 summe-= 1 / nenner; // Wird nur ausgeführt, wenn i
 //ungerade
 else
 summe+= 1 / nenner; // Wird nur ausgeführt, wenn i
 //gerade
 nenner = nenner + 2; // Nenner um erhöhen
 i++;
}while(nenner

Vorsicht, das geht natürlich nur, solange pow10l(nachkomma) Werte im gültigen Wertebereich liefert, auch dürfte der double Werte nenner irgendwann Ungenauigkeiten zeigen. Ausserdem fiel mir auf, dass die Funktion vom Typ double sein muss und nicht long, wenn Du das errrechnete Pi zurückgeben willst.
Viel Erfolg
hans


> <small>[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]</small>

Hallo Hans!

Vielen Dank für deine Antwort, genau das war es was ich gesucht habe! Danke für deine schnelle Hilfe.

MfG

Andreas