C++ Maschinengenauigkeit und Summen |
|
Geht es um die Formel?
?
Wenn die Reihe konvergiert (das tut sie, entspricht e^x), werden die Summanden immer kleiner. Die letzten kann man also vernachlässigen, sodass es ausreicht, die ersten 100 oder so auszurechnen.
__________________ Syntax Highlighting fürs Board (Link)
|
|
14.11.2015 20:50 |
|
|
Marcell99
Eroberer
Dabei seit: 14.11.2015
Beiträge: 53
|
|
ja die Formel richtig
was meinst du mit den letzten die letzten fragen ??
|
|
14.11.2015 20:56 |
|
|
|
Würde es komilieren, hättest du wieder eine Endlosschleife.
Die Summenformel ist falsch abgetippt, C kennt ! nicht also Fakultät und der Schleifenkopf kannst auch nicht (warum erhöhst du k um 10, warum prüfst du den Wert von n, nicht von k).
__________________ Syntax Highlighting fürs Board (Link)
|
|
14.11.2015 21:10 |
|
|
|
Kompilieren heißt, du hast gültigen Code geschrieben, den du in Maschinensprache übersetzen kannst.
Ich würde für Zähler und Nenner noch Variablen anlegen, in denen die den Wert in jedem Schleifendurchlauf ändern kannst.
code: |
1:
2:
3:
4:
5:
6:
7:
|
double zaehler = 1, nenner = 1;
double sum = 1; //für k=0, was nicht in der Schleife berechnet wird.
for (int k = 1; k < 100; k++) {
zaehler *= x; //x vom Nutzer eingelesen
nenner *= k;
sum += zaehler/nenner;
} |
|
__________________ Syntax Highlighting fürs Board (Link)
|
|
14.11.2015 21:18 |
|
|
|
sum ist deshalb 1, weil ich k eben nicht bei 0 anfangen lasse. Und der Summand für k=0 ist eben 1.
Die Fakultät musst du im Gesamtzusammenhang sehen: das wird bei jedem Schleifendurchlauf berechnet.
nenner *= k; heißt soviel wie nenner = nenner * k;.
Und die Nutzerinteraktion (Eingabe, Ausgabe) musst du noch machen, den Teil habe ich nicht geschrieben.
__________________ Syntax Highlighting fürs Board (Link)
|
|
14.11.2015 21:33 |
|
|
Marcell99
Eroberer
Dabei seit: 14.11.2015
Beiträge: 53
|
|
ahso okay
aber muss im zähler nicht x^k stehen??
warum lässt man das denn weg ??
|
|
14.11.2015 21:35 |
|
|
Marcell99
Eroberer
Dabei seit: 14.11.2015
Beiträge: 53
|
|
bei mir kommt immer ein Fehler :/
double zähler=1, nenner=1;
double sum =1;
for (int k=1; k<100; k++) {
zähler *=x;
cout<<"Geben sie x ein"<<endl;
cin>>x;
nenner *=k;
sum += zähler/nenner;
cout<<"Die Summe ist "<<zähler/nenner<<endl;
}
return 0;
}
|
|
14.11.2015 21:48 |
|
|
Marcell99
Eroberer
Dabei seit: 14.11.2015
Beiträge: 53
|
|
using namespace std;
int main(int argc, const char * argv[]) {
double zähler=1, nenner=1;
double sum =1;
double x;
cout<<"Geben sie x ein"<<endl;
cin>>x;
for (int k=1; k<100; k++) {
zähler *=x;
nenner *=k;
sum += zähler/nenner;
cout<<"Die Summe ist "<<zähler/nenner<<endl;
}
return 0;
}
hab ich es laufen lassen aber da steht (lldb) ?? und da ist jetzt ein breakpoint ??
|
|
14.11.2015 21:53 |
|
|
|