#include <stdio.h>
#include <math.h>
unsigned int fakultaet(int x) {
if (x == 0)
return 1;
else
return (x * fakultaet(x-1));
}
double hochzahl(int a, int b) {
double i=1.0, j=a;
for (i; i<b; i++) {
j*=a;
}
return j;
}
double exp_exakt(int start) {
double exakt=0.0;
exakt=exp(start);
return exakt;
}
[COLOR=royalblue]double exp_genaehert(int start, int end, double err_bound, double res) {
int j=2, hoch=2;
double genaehert=1.0+start, i=0.0;
[B]do {
i=fakultaet(j);
genaehert += ((1/i)*(hochzahl(start, hoch)));
hoch++;
j++;
} while ((res-genaehert)>err_bound);[/B]
return genaehert;
}
int main(void) {
int start=0, end=10, inc=2;
double err_bound=0.0010000000, [COLOR=royalblue]res=0.0;
printf("Naeherungsweise Berechnung von exp(x)\n\n");
printf("Startpunkt: %d\n", start);
printf("Endpunkt: %d\n", end);
printf("Schrittweite: %d\n", inc);
printf("Fehlerschranke: %.10lf\n\n", err_bound);
printf(" x : exp(x) genaehert : exp(x) exakt : Fehler\n");
printf("============================================================\n");
for (start; start<=end; start+=inc) {
[COLOR=royalblue]res=(exp_exakt(start)); printf("%2d : %16.10lf : %16.10lf : %.10e\n", start, exp_genaehert(start, end, err_bound, [COLOR=royalblue]res), exp_exakt(start), (exp_exakt(start)-exp_genaehert(start, end, err_bound, [COLOR=royalblue]res)));
}
putchar('\n');
return 0;
}