Eulersche zahl mit Hilfe Taylorreihe



  • include <math.h> is doch gestattet...
    Danke für die Hilfe!!!!!

    #include <stdio.h>
    #include <math.h>
    
    double exppow(double x, double gen)
    {
    
    	double a=1.;
    	double c=1.;
    	int d=1;
    	double e=1.;
    
    	while(gen<=fabs (a/c))
    	{
    
    		a=a*x;
    
    		c=c*d;
    
    		e=e+ (a/c) ;
    
    		d++;
    
    	}
    	return e;
    }
    
    int main (void)
    {
    	int n=4;
    	printf(" %g ", exppow(n,0.001) );
    }
    

    [code="c"]



  • pepe123 schrieb:

    include <math.h> is doch gestattet...

    Ist aber, wie schon gesagt, gar nicht nötig.

    Um nochmal den Tipp von SeppJ bezüglich der Vorfaktoren aufzugreifen:

    double exppow(double x, double gen)
    {
      int d=1;
      double e=1.;
      double de=1;
    
    // Hier fehlt noch die Überprüfung, ob die Paramter sinnvolle Werte enthalten
    
      do
      {
        de *= x/d ;  // Hier wird nur noch mit dem Unterschied zum Vorwert gerechnet
    // Dadurch werden die Einzelwerte nicht so riesig groß
    
        e+=de;
        d++;
    
      } while(de>gen);
    
      return e;
    }
    
    int main (void)
    {
      printf(" %g ", exppow(1,1e-99) );
    }
    


  • warum sind die differenzen nur positiv? input x kann doch auch negativ sein und dann sind es die differenzen auch.



  • Okay das is jetz mein entgültiger Quellcode:

    #include <stdio.h>
    
    double exppow(double x, double gen)
    {
    
    	double ep=1;
    	double rg=1;
    	int i=1;
    
    	while(rg>gen)
    	{
    		rg=rg*x/i++;
    		ep=ep+rg;
    
    	}
    	return ep;
    }
    
    int main (void)
    {
    	printf(" %g ", exppow(3.0,0.001) );
    }
    


  • Jetz hab ich von nem Kumpel den Quellcode für sinus(x) bekommen:

    Allerdings versteh ich nicht was das %.3f im printf soll und iwie kommt da auch was falsches raus...
    Vll könnt ihr mie da auch helfen ?! 🙂

    #include <stdio.h>
    #include <math.h>
    
    double sinpow(double x, double genauigkeit)
    {
    	double sinus=x;
    	double rg=x;
    	int i=2;
    
    	while( fabs(rg)>genauigkeit)
    	{
    
    		rg = rg * -x * x / i / ( i + 1 );
    		sinus = sinus + rg;
    		i += 2;
    
    	}
    	return sinus ;
    }
    
    int main (void)
    {
    	printf(" sin(x)=%.3f \n", sinpow(3.14,0.01) );
    }
    


  • StarCraftFeuerteufel schrieb:

    warum sind die differenzen nur positiv? input x kann doch auch negativ sein und dann sind es die differenzen auch.

    😮 🙄 schäm



  • pepe123 schrieb:

    Allerdings versteh ich nicht was das %.3f im printf soll und

    Gibt dir die Zahl mit 3 Nachkommastellen aus.
    Siehe: http://www.cplusplus.com/reference/cstdio/printf/



  • Das programm müsste also jetz sin(3.14) berechenen.
    mein taschenrechner wirft da 0,054 aus aber das programm 0,001...


  • Mod

    pepe123 schrieb:

    Das programm müsste also jetz sin(3.14) berechenen.
    mein taschenrechner wirft da 0,054 aus aber das programm 0,001...

    Du kannst nicht mit deinem Taschenrechner umgehen. sin(3.14) = 0.00159265...

    Allgemein ist es keine so gute Idee, Sinus, besonders mit so großen Zahlen wie 3.14, über die Taylorreihe zu berechnen, aber für die hier vorliegenden Anforderungen reicht es noch.



  • Dann stell mal deinen Taschenrechner auf Bogenmaß (RAD) um.

    Der Sinus von Pi ist 0.
    Wenn du mal ein paar mehr Stellen zu den 3.14 spendierst, solte das auch rauskommen.



  • 👍



  • Wie man aber auf den Therm kommt ist mir nich klar:

    rg = rg * -x * x / i / ( i + 1 );
    

    rg*-x*x ist für die potenz und den vorzeichenwechsel aber wie man auf die Fakultät kommt ist mir unklar...


Anmelden zum Antworten