/* From: "COMPUTATIONAL PHYSICS, 2nd Ed" by RH Landau, MJ Paez, and CC Bordeianu Copyright Wiley-VCH, 2007. Electronic Materials copyright: R Landau, Oregon State Univ, 2007; MJ Paez, Univ Antioquia, 2007; & CC Bordeianu, Univ Bucharest, 2007 Support by National Science Foundation */ // exp-good.c: A good algorithm for calculating exponential // related programs: exp-bad.c.c #include #include #define min 1E-10 // limit for accuracy #define max 10. // maximum for x #define step 0.1 // interval main () { double x, sum, element; int n; FILE *output; // file output output = fopen("exp-good.dat", "w"); for (x = 0.0; x<= max; x+= step) { sum= element= 1.; // reset variables n = 0; // sum till accuracy reached do { n++; element *= -x/n; // calculate next element sum += element; } while ((sum == 0) || (fabs(element/sum) > min)); fprintf(output, "%f\t%e\n", x, sum); } printf("results saved in exp-good.dat\n"); fclose(output); }