C++ Maschinengenauigkeit und Summen - Seite 2

Neue Frage »

Auf diesen Beitrag antworten »
Marcell99

ahso okay

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

warum lässt man das denn weg ??
 
Auf diesen Beitrag antworten »
eulerscheZahl

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

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;
}
Auf diesen Beitrag antworten »
eulerscheZahl

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.
 
Auf diesen Beitrag antworten »
Marcell99

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 ??
Auf diesen Beitrag antworten »
eulerscheZahl

Du bist bei Fehlermeldungen immer sehr ungenau. So kann ich nichts damit anfangen.
Du musst noch iostream einbinden. Das Endergebnis hast du nicht ausgegeben. Und Umlaute sind wie gesagt nicht empfehlenswert (der g++hat sie nicht akzeptiert)
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
#include <iostream>

using namespace std;

int main(int argc, const char * argv[]) {
	double zaehler = 1, nenner = 1;
	double sum = 1;
	double x;
	cout << "Geben sie x ein" << endl;
	cin >> x;
	for (int k = 1; k < 100; k++) {
		zaehler *= x;
		nenner *= k;
		sum += zaehler/nenner;
		cout<<"Der Summand ist "<< zaehler/nenner << endl;
	}
	cout<<"Die Summe ist "<< sum <<endl;
	return 0;
}
Auf diesen Beitrag antworten »
Marcell99

Jaaa es hat geklappt
Da ist wieder eine Liste gekommen, ist damit die Aufgabe zu Ende oder???

Danke das du mir geholfen hättest, hätte ich alleine nie geschafft
Auf diesen Beitrag antworten »
eulerscheZahl

Du sollst dich noch um die Genauigkeit kümmern.
Wir summieren die Werte bis k=100 auf, weniger würde auch reichen für die geforderten 10^-6
Auf diesen Beitrag antworten »
Marcell99

Aber das hängt doch davon ab was man für k einsetzt oder ??
Auf diesen Beitrag antworten »
eulerscheZahl

Das maximal nötige k wollen wir bestimmen. Und es hängt vom x ab.
Auf diesen Beitrag antworten »
Marcell99

Man setzt also die x Werte (1,2,3) ein und schaut ob es ist 10^(-6)
Auf diesen Beitrag antworten »
eulerscheZahl

Du musst sicherstellen, dass die Summe aller Terme für k=k_max+1 bis unendlich kleiner ist als die geforderte Genauigkeit von 10^-6.

Du sollst eine Taylor - Mac Laurin Reihe bestimmen, das Restglied ist bekannt (siehe Formelsammlung).
Auf diesen Beitrag antworten »
Marcell99

So??
Auf diesen Beitrag antworten »
Marcell99

Kann es nicht hochladen

(F(0)(1)/0! +f(1)(2)/1! +f(2)(3)/2!) (x-1)^0

Wie programmiere ich das denn
Auf diesen Beitrag antworten »
eulerscheZahl

Das Restglied ist einfach [latex]\frac{x^{k_{max}+1}}{(k_{max}+1)!}[/latex].
Das ist praktisch, da wir das sowieso ausrechnen müssen ist der Summe.
Auf diesen Beitrag antworten »
Marcell99

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;


double rg;
rg *=+1+x/(k+1);



}



return 0;

}
Auf diesen Beitrag antworten »
Marcell99

oder das in der summe ersetzen ??
Auf diesen Beitrag antworten »
eulerscheZahl

Warum so kompliziert?
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
#include <iostream>

using namespace std;

int main(int argc, const char * argv[]) {
	double zaehler = 1, nenner = 1;
	double sum = 1;
	double x;
	cout << "Geben sie x ein" << endl;
	cin >> x;
	for (int k = 1; zaehler/nenner > 1e-6; k++) {
		zaehler *= x;
		nenner *= k;
		sum += zaehler/nenner;
		cout<<"Der Summand ist "<< zaehler/nenner << endl;
	}
	cout<<"Die Summe ist "<< sum <<endl;
	return 0;
}

Man beachte das Abbruchkriterium in der Schleife, das nicht mehr auf den Wert von k prüft.
Wenn du das für verschiedene Werte von x testest, wirst du feststellen, dass sich die Zahl der Additionen ändert.
Auf diesen Beitrag antworten »
Marcell99

aber warum denn ausgerechnet 1e-6 ??
Auf diesen Beitrag antworten »
eulerscheZahl

1e-6 ist das selbe wie 0.000001, also [latex]1 \cdot 10^{-6}[/latex]. Das hat nichts mit [latex]e = 2.718281828450945\dots[/latex] zu tun.
Auf diesen Beitrag antworten »
Marcell99

das wusste ich ja garnicht ich dachte das wäre die eulersche zahl :////


ahso jetzt verstehe ich das auch.
ist ja wirklich einfach
Auf diesen Beitrag antworten »
Marcell99

steht das e immer für die 10
oder kann man auch 2 schreiben ??
Auf diesen Beitrag antworten »
eulerscheZahl

Das e (auch als großes E möglich) steht für [latex]\cdot 10^{...}[/latex].
Wenn du eine Zahl z.B: mit 2^7 multiplizieren willst, kannst du das mit x << 7 tun (nennt sich shiften, geht aber nur für Ganzzahlen).
Auf diesen Beitrag antworten »
Marcell99

ahso
ich merke grad das ich echt nichts weiß :/
Auf diesen Beitrag antworten »
eulerscheZahl

Ich mache das ja auch schon ein paar Jahre, während du neu angefangen hast. Da ist Unwissenheit ganz normal - alles andere sollte eher mir zu denken geben smile
Auf diesen Beitrag antworten »
Marcell99

danke wirklich Daumen hoch

ich hab hier noch eine Aufgabe aber ich weiß nicht ob du dich damit auskennst das hat nämlich nichts mit programmieren zu tun, das hat mit der


"Partialsummen der harmonischen Reihe??" zu tun
Auf diesen Beitrag antworten »
eulerscheZahl

Habe ich schonmal gehört, da müsste ich die Aufgabe sehen, um sagen zu können, ob ich helfen kann (aber bitte einen neuen Thread erstellen).
Alternativ kannst du auch im matheboard nachfragen.

Ich bin jetzt erst mal Fußball spielen.
Auf diesen Beitrag antworten »
Marcell99

ok und danke nochmal Daumen hoch
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »