2022-10-28 04:24:32 +00:00
|
|
|
#include <math.h>
|
|
|
|
|
|
|
|
#define TOLERANCE 0.0000001
|
|
|
|
|
|
|
|
/*
|
|
|
|
A C adaptation of Dr. Ching-Kuang Shene's FORTRAN version
|
|
|
|
from https://pages.mtu.edu/~shene/COURSES/cs201/NOTES/chap04/exp.html
|
|
|
|
|
|
|
|
I was stuck on how to actually implement the Taylor series without it
|
|
|
|
getting far too big for even a long double, and I'm not sure I ever would
|
|
|
|
have thought to just break it out recursively like this. Instead of each
|
2022-10-28 04:27:03 +00:00
|
|
|
term being x^n/n!, where we have to figure out both x^n and n!, both of which
|
|
|
|
could be massive, we instead say that it's (x/n+1)*(nth term), with a base
|
|
|
|
case (1st term) of x/1! = x. Pretty clever, really.
|
2022-10-28 04:24:32 +00:00
|
|
|
|
|
|
|
Also, really glad I know how to at least read a basic FORTRAN program. This
|
|
|
|
probably would have been a little more annoying if I didn't.
|
|
|
|
|
|
|
|
-Kat
|
|
|
|
*/
|
|
|
|
double exp(double x) {
|
|
|
|
double term = x;
|
|
|
|
double sum = 1.0;
|
|
|
|
|
|
|
|
for(int i = 1; fabs(term) > TOLERANCE; i++) {
|
|
|
|
sum += term;
|
|
|
|
term *= (x / i);
|
|
|
|
}
|
|
|
|
|
|
|
|
return sum;
|
|
|
|
}
|