Hallo, wie kann ich die Kreiszahl PI mit Hilfe der folgenden Reihendarstellung nach Gottfried Willhelm Leibniz berechnen(In C)?

Destranix  02.12.2023, 15:20

Wie siehst deine Code und deine Ausgabe den aktuell aus?

Zouck 
Fragesteller
 02.12.2023, 15:34
double leibniz(double n) {
double pi = 0.0;
for (int i = 0; i < n; i++) {
double z = 1.0 / (2 * i + 1);
if (i % 2 == 0) {
pi += z;
}
else {
pi -= z;
}
}
pi *= 4.0;
return pi;
}
Codeline  02.12.2023, 15:35

..

Zouck 
Fragesteller
 02.12.2023, 15:37

Darf anscheinend nicht so viel schreiben habe den code den ich jetzt versucht habe geschickt und es kommt bei mir 2.666667 bei leibniz(2); und nicht 3.466667.

1 Antwort

Versuch es doch mal mit Double-Literalen und Werten:

(2.0 * ((double) i) + 1.0);

Ansonsten: Vielleicht ist die Grenze "n" inklusiv gemeint? (Also kleiner gleich statt kleiner.)

Zouck 
Fragesteller
 02.12.2023, 15:41

Danke war das kleiner gleich weiß nicht wie ich das nie bemerkt habe. Ich schaue jetzt ob der code komplett richtig ist, aber sollte wahrscheinlich.

0
Zouck 
Fragesteller
 02.12.2023, 15:42
@Zouck

Okay anscheinend ist es falsch obwohl ich bei dem code jetzt das richtige Ergebnis raus bekomme, aber wenn ich die Lösung hochlade wird gesagt das jede Prüfung fehlschlägt.

0
Destranix  02.12.2023, 15:50
@Zouck

Dann wohl ein Fehler im API von denen? Oder du musst es noch einmal neu compilieren?

0
Zouck 
Fragesteller
 02.12.2023, 15:45

Das ist mein momentaner Code

double leibniz(double n) {

double pi = 0.0;

for (int i = 0; i <= n; i++) {

double z = 1.0 / (2 * i + 1);

if (i % 2 == 0) {

pi += z;

}

else {

pi -= z;

}

}

pi *= 4.0;

return pi;

}

Bei Visual Studio bekomme ich das richtige Ergebnis raus aber auf der Website wo ich das hochladen muss kommt anscheinend die falsche Lösung raus. Habe auch schon vesucht es zu double werten zu ändern.

0
Zouck 
Fragesteller
 02.12.2023, 15:48

Wenn ich (double) i versuche bekomme ich auch einen Syntaxfehler bei der Website zum hochladen. Weiß nicht was ich noch ändern kann oder muss.

0
Destranix  02.12.2023, 15:49
@Zouck

Passen die Klammern denn?

Ansonsten machst du halt soetwas:

double d = i;
0
Zouck 
Fragesteller
 02.12.2023, 15:52
@Destranix

Habe bemerkt das der Fehler kam weil ich double i auch in der for schleife versucht habe. Der Code jetzt hat keinen Syntaxfehler aber ist angeblich trotzdem falsch. Und wenn ich double d = i; versuche kommt wieder ein Syntaxfehler.

double leibniz(double n) {

double pi = 0.0;

for (int i = 0; i <= n; i++) {

double z = 1.0 / (2.0 * (double)i + 1.0);

if (i % 2 == 0) {

pi += z;

}

else {

pi -= z;

}

}

pi *= 4.0;

return pi;

}

0
Destranix  02.12.2023, 15:55
@Zouck

Dann ist deren Compiler Mist. Wende dich an die zuständige Person.

1
Zouck 
Fragesteller
 02.12.2023, 15:57
@Destranix

Alles klar ich schreibe eine Mail und frage ob der Compiler einen Fehler hat und vielen Dank für die Hilfe!

1