Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » C++ Maschinengenauigkeit und Summen » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Seiten (5): « vorherige 1 2 [3] 4 5 nächste » Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen C++ Maschinengenauigkeit und Summen
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Marcell99
Eroberer


Dabei seit: 14.11.2015
Beiträge: 53

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Schreiben Sie ein C/C++ Programm welches den Wert der Reihe
unendlichschleife sigma k=0 x^k/k!
ausgibt, wobei alle Summanden die kleiner sind als eine vorgegebene Genauigkeit €(epsilon) vernachlässigt werden sollen. Vergleichen Sie diesen Wert für x Elemente {1, 2, 3} und für die Genauigkeit € = 10^(-6) in C/C++ zur Verfügung, sobald Sie den header math.h eingebunden haben.


ich versteh nie wie man diesen summand programmieren kann das ist total verwirrend woher weiß man wie man unendlichschleife einfügt ://

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Marcell99: 14.11.2015 20:39.

14.11.2015 20:37 Marcell99 ist offline E-Mail an Marcell99 senden Beiträge von Marcell99 suchen Nehmen Sie Marcell99 in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Geht es um die Formel?
[latex]f(x) = \sum\limits_{k=0}^{\infty}\frac{x^k}{k!}[/latex]?

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 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Marcell99
Eroberer


Dabei seit: 14.11.2015
Beiträge: 53

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

ja die Formel richtig


was meinst du mit den letzten die letzten fragen ??
14.11.2015 20:56 Marcell99 ist offline E-Mail an Marcell99 senden Beiträge von Marcell99 suchen Nehmen Sie Marcell99 in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Beispiel:
[latex]x = \sum_{k=0}^{\infty}\frac{1}{10^k} = 1 + \frac{1}{10} + \frac{1}{100} + \frac{1}{1000} + \frac{1}{10000} \underbrace{+ \frac{1}{100000} + \frac{1}{1000000} + \dots}_{\hbox{unwichtig, da sehr kleine Zahlen}}[/latex]
x = 1.111111111... kann mit 1.1111 angenähert werden-

__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 14.11.2015 21:01.

14.11.2015 21:00 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Marcell99
Eroberer


Dabei seit: 14.11.2015
Beiträge: 53

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

ahso okay das meinst du


tipp man das so ein


double sum;
int k,n;
cout <<"n eingeben"<<endl;
cin >> n;
sum=0;
for (k=0;100>n;k=k+10)
{
sum=sum+n*10*k/k;!
}


cout <<"Summe ist "<<sum<<endl;






return 0;
}

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Marcell99: 14.11.2015 21:06.

14.11.2015 21:06 Marcell99 ist offline E-Mail an Marcell99 senden Beiträge von Marcell99 suchen Nehmen Sie Marcell99 in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Marcell99
Eroberer


Dabei seit: 14.11.2015
Beiträge: 53

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

wie man die summenformel eintippt find ich voll schwer ://

ich verstehe das garnicht, das ist total verwirrend
was heißt denn komilieren ??

wie tipp man denn sonst die Fakultät ein und die Endlosschleife ??

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Marcell99: 14.11.2015 21:14.

14.11.2015 21:13 Marcell99 ist offline E-Mail an Marcell99 senden Beiträge von Marcell99 suchen Nehmen Sie Marcell99 in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Marcell99
Eroberer


Dabei seit: 14.11.2015
Beiträge: 53

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

das verstehe ich nicht

warum schreibst double sum =1 ?? und was hat das mit k=0 zu tun ? den Zusammenhang verstehe ich nicht.

und warum soll es nicht berechnet werden in der Formel steht doch das es bei K= 0 anfängt ??

steht das hier * für die Fakultät ??
und was bedeutet das += ??


und du hast ja schrieben x wird vom Nutzer eingelesen soll ich da ein cout machen ??

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Marcell99: 14.11.2015 21:28.

14.11.2015 21:26 Marcell99 ist offline E-Mail an Marcell99 senden Beiträge von Marcell99 suchen Nehmen Sie Marcell99 in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Marcell99
Eroberer


Dabei seit: 14.11.2015
Beiträge: 53

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

ahso okay

aber muss im zähler nicht x^k stehen??

warum lässt man das denn weg ??
14.11.2015 21:35 Marcell99 ist offline E-Mail an Marcell99 senden Beiträge von Marcell99 suchen Nehmen Sie Marcell99 in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Das x^k berechne ich in Zeile 4.
Wie die Fakultät auch mache ich das schrittweise, muss also nur mit x multiplizieren.

__________________
Syntax Highlighting fürs Board (Link)
14.11.2015 21:40 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Marcell99
Eroberer


Dabei seit: 14.11.2015
Beiträge: 53

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 ist offline E-Mail an Marcell99 senden Beiträge von Marcell99 suchen Nehmen Sie Marcell99 in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hast du für x eine Variable angelegt?
Und das Einlesen von x muss vor, nicht in der Schleife erfolgen.
Ach, Umlaute (äöüß) würde ich vermeiden.
Und "ein Fehler" ist sehr ungenau. Ich bin für heute weg.

__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 14.11.2015 21:50.

14.11.2015 21:49 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Marcell99
Eroberer


Dabei seit: 14.11.2015
Beiträge: 53

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 Marcell99 ist offline E-Mail an Marcell99 senden Beiträge von Marcell99 suchen Nehmen Sie Marcell99 in Ihre Freundesliste auf
Seiten (5): « vorherige 1 2 [3] 4 5 nächste » Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » C++ Maschinengenauigkeit und Summen