Processing math: 100%
C-Programmierung

Einsatz Von Funktionszeigern

Funktionszeiger | | Callbacks

Einsatzbeispiel von Funktionszeigern:

Summe über rationale Zahlen bi=ati,ti=nidi

Leibniz-Reihe zur Berechnung von π4:

π4=113+1517+...
ti=(1)i12i+1

Euler-Reihe zur Berechnung von e:

e=1+12!+13!+14!+...
ti=1i!
$ n_i=1
di+1=dii,d1=1

Summenfunktion mit variabler Termfunktion:

void sum(int a, int b, double x,
         double (*term)(int i, double x, double *numerator, double *denominator))
{
   double s;
   double n,d;

   for (s=0.0,n=d=1.0,int i=a; i<=b; i++)
   {
      (*term)(i, x, &n, &d);
      s+=n/d;
   }

   return(s);
}

Damit ergibt sich die Berechnung von π bzw. e aus ein und derselben Summenfunktion mit verschiedenen Termfunktionen:

double leibniz_term(int i, double x, double *numerator, double *denominator)
{
   *numerator = i&1?-1.0:1.0;
   *denominator = 2*i+1;
}

double pi_sum(int n)
{
   return(4*(1+sum(1, n, 0.0, leibniz_term)));
}
double euler_term(int i, double x, double *numerator, double *denominator)
{
   *denominator*=i;
}

double euler_sum(int n)
{
   return(sum(1, n, 0.0, euler_term));
}

Q Wie lautet die Darstellung der Exponentialfunktion ex als Potenzreihe (Taylorreihe) mit Hilfe obiger Summenfunktion?

Potenz-Reihe:

ex=1+x1!+x22!+x33!+...
double exp_term(int i, double x, double *numerator, double *denominator)
{
   *nominator*=x;
   *denominator*=i;
}

double exp_sum(double x, int n)
{
   return(sum(1, n, x, exp_term));
}


Funktionszeiger | | Callbacks

Options: