#include <stdio.h>
#include <math.h>
// i=1 , 3 ,5,7..... 1
// i=2 , 4 ,6 ..... -1
//  i&1 => 1 or 0 => true(odd) or false(even) 
double ans(double res,int x,int i){
    if (0 >= i) return res;
    res += pow(x,i)/ ( i&1  ? i: -i  ) ;
    return ans( res , x, i-1);
}
// X-(X^2/2)+(X^3/3)-(X^4/4)........+(X^n/n)
// -(-X^1/1)+ -(-X^2/2) + -(-X^3/3) ......+ -(-X^n/n)
double ans1(const double res,const int x,const int i){
    return (0>=i) ? res : ans1(res - pow(-x,i)/i,x,i-1); 
}
#define Ans1(x,i) ans1(0,(x),(i))
int main(int argc , char* argv[]) {
    printf("%f\n", ans(0,2,5) );
    printf("%f\n", ans1(0,2,5) );
    printf("%f\n", Ans1(2,5));
}
gcc -lm -O2 // -O2 optimize tail recursion
double Ans(double x, int n)
{
int i;
if (n<=0) return x;
if (n==1) return 0.0;
for ( i=2; i<=n; i++)
{
     if ((i%2)==0)  x = x - (pow(x,i)/i);
     else                     x = x + (pow (x,i)/i);
}
return x;
}
趕出門,還沒測試
//利用「餘式定理」及「綜合除法」求多項式值
double f(double x, int n) {
    double result=((n&1)?1:-1)/n;
    while(--n>=0) {
        result=result*x+((n&1)?1:-1)/n;
    }
    return result;
}