Berechnung von Pi
-
Hallo zusammen, ich habe die Aufgabe mit einer schlaufe und double pi zu berechnen
die formel lautet pi=4-4/3+4/5-4/7+4/9...
soweit so gut, jetzt habe ich ein einfaches programm geschrieben mit all dem was ich so brauchen darf (sehr eingeschränkt, aber es scheint fast zu klappen)
schaut, hier der sourcecode:
#include <iostream> int main () { // Input std::cout << "Approximate the constant pi for how many iterations. n = ? "; int n; std::cin >> n; // Computation double pi = 0; // Iteration 1 to n for (int i = 1; i<=n; i+=2) // Because we need expr i+2 we can not write ++i++i or else only i+=2 { if (i%4 == 1 ) // We have to make out wheter a divisor has to be added or to be subtracted pi += 4/i; else pi -= 4/i; std::cout << "The current approximation is " << pi << " \n "; } return 0; }
Gut, mein problem ist jetzt der output wenn ich kompiliert habe:
wenn ich zbsp n=1000 eingebe kommt 1000x
The current approximation is 3
egal, wie oft, es gibt einfach nicht double aus, bzw, die relevanten zahlen nach dem komma, was ist hier los?
Lg Axel
-
der fehler liegt hier:
pi+=4/i;
bzw.
pi-=4/i;
das ist eine ganzzahlige division. du musst mindestens einen von beiden als fließkommazahl darstellen.
also entweder:
pi+=4.0/i;
oder
pi+=4/(double)i;
oder ganz korrekt:
pi+=4.0/(double)i;
-
So einfach kanns sein, merci, es läuft jetzt,
:p
-
ghorst schrieb:
pi+=4.0/(double)i;
Oder mit den C++-Style-Casts:
pi+=4.0/static_cast<double>(i);
-
ach komm. das ist doch nun wirklich unnötig viel zu schreiben. ich bin faul, daher ist hier ein c-cast besser lesbar, weil er kürzer ist.
-
oder Funktionstyle
4./double(i)
wobei das letztlich so oder so überflüssig und nicht hilfreich ist. Die Verwendung eines Gleitkommaliterals sollte aussagekräftig genug sein.
-
stimmt der geht auch noch und wäre "mehr" c++ gewesen. den nutze ich normalerweiser nur bei klassen. warum auch immer...
das gleitkommaliteral ist mit sicherheit die eindeutigste variante. da hast du hast.