e hoch x mit Taylorentwicklung?



  • Hi Leute!

    Ich möchte mir ein Programm basteln, dass mir e^x mit der Taylorentwicklung berechnet. Unten seht ihr mal meinen Code:

    #include<stdio.h>
    
    int main()
    {
    	double z, s, si, x, g;
    	int i, n;
    
    	printf("Berechnung von e hoch x \n");
    	printf("x = "); scanf("%lf", &x);
    	printf("Genauigkeit g = "); scanf("%lf", &g);
    	printf("\ni           Summand              Summe\n");
    	printf("--------------------------------------\n");
    
    	z = 1.0;
    	n = 1;
    	i = 0;
    	s = 1.0;
    
    	do
    	{
    		i = i + 1;
    		n = n * i;
    		z = z * x;
    		si = z/n;
    		s = s + si;
    		printf("i = %i,      si = %lf,       s = %lf \n\n", i, si, s);
    	}
    	while(si > g);
    
    return 0;
    }
    

    Wenn ich jetzt z.B. e^5 berechnen lassen möchte, dann schmeißt mir mein Programm aber 17 verschiedene Ergebenisse aus und nur zwei die etwas drunter und ewas drunter liegen wenn man für die Genauigkeit 0,00000001 eingibt.

    Also entweder ich hab hier was nicht richtig verstanden, oder mein Prog stimmt nicht. Könnt ihr mir helfen?



  • Du gibst doch in der Schleife alle Zwischenschritte aus, bis der Unterschied zwischen 2 Schritten kleiner als deine Genauigkeit ist.

    Der Letzte Wert von s ist dann das Ergebnis.



  • Erkläre anhand von

    http://www.ideone.com/hFOHR

    mal, wo der Fehler liegt.



  • Ups. Überlauf bei n
    Mach mal aus n ein double.



  • DirkB schrieb:

    Ups. Überlauf bei n
    Mach mal aus n ein double.

    So wie ich das gerade sehe wennschon long. Ich glaube n als double wäre nicht wirklich sinnvoll. Aber wenn ich seinen Code gerade richtig verstehe sollte es eigentlich nicht nötig sein, dass n so gross wird.



  • Die Berechnung erfolgt nach ∑ 1/n! mit n von 1 .. ∞

    long ist i.A. 32-Bit groß. Das sprengt man schon mit 13!
    Während double erst bei 21! an die (Genauigkeits-)Grenze stößt.



  • Man sollte zwischen den Weihnachtseinkäufen und Eisräumen keine Antworten geben 🙄
    Die obige Formel war nur für e1
    Die Berechnung erfolgt nach ex = ∑(xn/n!) mit n von 1 .. ∞



  • Es reicht bei der genauigkeit von double eine entwicklung von n=4 wenn die exponentialfunktion auf das interval ]0,1[ einschränkt und nachher mit 2^x auf das intervall [1,inf[ erweitert....



  • Der zweite Summand unterscheidet sich vom ersten nur durch x/n, d.h. man bracht x^n oder n! nicht einzeln ausrechnen.



  • DirkB schrieb:

    Ich glaube n als double wäre nicht wirklich sinnvoll.

    Aber es wird doch ein double-Wert durch n dividiert. Dafür muss doch n sowieso jedesmal nach double konvertiert werden, oder?


Anmelden zum Antworten