Zdravím,
píšem program pre výpočet exponenciálnej funkcie e^x, no nedarí sa mi dosiahnuť požadovanú presnosť.
Vzorec
Čítateľ:
Kód:
long double myPow(long double x, long int y) {
if (x == 0) { return 0; }
if (y == 0 || x == 1) { return 1; }
if (y == 1) { return x; }
return myPow(x*x, y / 2) * ((y % 2 == 0) ? 1 : x);
}
Menovateľ:
Kód:
long double factorial(int n)
{
if (n == 0)
return 1;
else
return(n * factorial(n - 1));
}
Samotný program:
Kód:
long double x;
long double xpow = 1;
long double fval = 1;
long double fact = 1;
int integ, decim;
srand(time(NULL));
integ = rand() % 10;
decim = rand() % 100;
x = (long double)integ + (long double)decim/100;
for (int n=0; n < 50; n++)
{
xpow = myPow(x, n);
fact = factorial(n);
fval += xpow / fact;
printf(" %2.0d terms: \t%22.16Lf\n", n+1, fval-1);
}
Porovnávam to s WA a pomocou funkcie exp, knžnicu math.h nemôžem použiť.
Vopred vďaka.