.j
-
.j
-
Versuche mal
1.0/fakultaet;
-
In Zeile 14 und 19 machst du eine Integerdivison, die nicht das macht, was du erwartest. Wenn du in C++ (und C, C#, Java, etc) Integer dividerst, so werden die Nachkommastellen verworden.
Es muss lauten
erg = 1.0/fakultaet;
Dann wird eine Divison in Double Precision durchgefuehrt.
-
.j
-
Deine zwei Stufen bei der Berechnung von erg funktionieren auch nicht.
erg = 1.0/fakultaet; // Hier wird jedes vorherige Ergebnis von erg überschrieben. ... erg += erg; // Das ergibt bei dir immer 2*erg
Durch geschickte Initialisierung von erg und k kannst du auch auf das
if (k==0)
verzichten
-
.j
-
Juli84 schrieb:
Löse ich dieses Problem mit einer weiteren for-Schleife? Verstehe das gerade nicht so ganz...
Nein.
Du musst gleich
erg += 1.0/fakultaet;
berechnen.Ach ja, beim Wertebereich eines 32-Bit int bekommst du schon bei 13! Schwierigkeiten.
-
.j
-
Juli84 schrieb:
Die 35. Partialsumme hat den Wert inf.
Inf kenne ich jetzt aus Mathe als Minimum?
Inf = Infinite (unendlich). Du hast durch Null geteilt. Jetzt mache ich dem Nightmare mal ein Ende:
#include <stdio.h> int main(void) { unsigned int n, k, j; double fakultaet; double s = 0; printf("Die wievielte Partialsumme soll berechnet werden?\n"); scanf("%d", &n); for (k=0; k<n; ++k) { if (k>1) { fakultaet = k; for (j=k-1; j>0; --j) { fakultaet *= j; } } else fakultaet = 1.0; s += 1.0/fakultaet; } printf ("Die %d. Partialsumme hat den Wert: %.16lf\n",n,s); return 0; }
viele grüße
ralph
-
Geht auch noch etwas einfacher. Man muss die Fakultaet nicht jedes mal von vorne berechnen:
int main(void) { int k, n; double factorial, sum; printf("Geben Sie n ein: "); scanf("%d", &n); sum = factorial = 1; for ( k = 1; k <= n; ++k ) { factorial *= k; sum += 1 / factorial; } printf("%.16lf\n", sum); }
-
Juli84 schrieb:
Vielen Dank!!!
Also ich bekomme, wenn ich 35 eingebe, die Ausgabe:Die 35. Partialsumme hat den Wert inf.
Inf kenne ich jetzt aus Mathe als Minimum?
Du darfst dir die Zwischenwerte auch gerne mal mit printf ausgeben um zu sehen was da passiert.
Besser noch, du nimmst den Debugger.