Listing 1 Shows roundoff error in computing powers of e
#include <stdio.h> #include <math.h> double e(double x); main() { printf("e(55.5) == %g, exp(55.5) == %g\n", e(55.5), exp(55.5)); printf("e(-55.5) == %g, exp(-55.5) == %g\n", e(-55.5), exp(-55.5)); printf("1/e(55.5) == %g\n",1.0 / e(55.5)); return 0; } double e(double x) { double sum1 = 1.0; double sum2 = 1.0 + x; double term = x; int i = 1; /* Calculate exp(x) via Taylor Series */ while (sum1 != sum2) { sum1 = sum2; term = term * x / ++i; sum2 += term; } return sum2; } /* Output: e(55.5) == 1.26866e+24, exp(55.5) == 1.26866e+24 e(-55.5) == -6.76351e+06, exp(-55.5) == 7.88236e-25 1/e(55.5) == 7.88236e-25 */ /* End of File */