#include #include double est(int nu, double x); double s(int nu, double x); int main(void) { double x=15.0,y,ei = -1.9186278921478669771e-8,sol; int nu; sol = -exp(x) * ei; printf("%3s %18s %10s %10s\n","nu","y ","error","err est"); for(nu = 0;nu <= 19;nu++){ y = s(nu,x); printf("%3d %-18.15g %10.3g %10.3g\n",nu,y,y-sol,est(nu,x)); } printf("%3s %-18.15g\n","sol",sol); return 0; } /* sum_{k=0}^{nu} (-1)^k k!/x^{k+1} */ double s(int nu, double x) { int k,sign = -1; long long int fact=1LL; double y = 0.0,powx = 1.0; for(k = 0;k <= nu;k++){ powx *= x; sign *= -1; if (k == 0) fact=1LL; else fact *= (long long int) k; y += sign * fact /powx; } return y; } double est(int nu, double x) { int k; long long int fact=1LL; double powx = 1.0; for(k = 0;k <= nu+1;k++){ powx *= x; if (k==0) fact=1LL; else fact *= (long long int) k; } return 2 * fact /powx; }