#include <stdio.h>
#include <math.h>
#include <stdlib.h>

double a[] ={1, 3, 0, -2, -1};
double b[5];
double c[5];

double differential(double x0)    // 미분 함수
{  
 int k;
 int n = 3;

 c[0] = b[0];

 for(k=1; k<=n;k++){    //1 5 10 18 35
  c[k] = b[k]+ x0 * c[k-1];
  //printf("%d\n",c[k-1]);
 }
 //printf("========differential===========\n");
 return c[3];
}

double synthetic_func(double x0){ // 조립제법 함수 
 
 int k;
 int n=4;
 
 //double x0 = 2;
 
 b[0] = a[0];

 for(k=1; k<=n; k++){     // a = 1, 3, 0, -2, -1
  b[k] = a[k]+ x0 * b[k-1];  // b= 1 5 10 18 35 
  //printf("%d\n",b[k-1]);
  c[k] = b[k];
 }
 //printf("=======synthetic_func============\n");
 return b[5];
}

void func(){  // Newton Rahpson
 double x0 = 2;  // x0는 2
 double km = 10; // 반복 횟수 10

 double e1=0, e2=0;  
 double f0, f1;
 double x1;
 int k =1;

 f0 = synthetic_func(x0);// 35  // 조립제법 함수 호출

 for(k=1; k<=km; k++){
  f1 = differential(x0);  // 66  // 미분 함수 호출
  x1 = x0-(f0/f1);    
  f0 = synthetic_func(x1);
  
  if(fabs(x1-x0) < e1)
  {
   printf("%lf\n", x0);
   printf("bbbbbbbbbbbbbbba\n");
   break;
  }

  else if(fabs(f0) < e2)
  {
   printf("%lf, %lf \n", x1,f0);
   printf("cccccccccccca\n");
   break;
  }
  else
  {
   x0=x1; // x1이 x0에 대입이 안됨
  }

  printf("k = %d / x_1 = %lf\n", k, x1);
 }
 
}

int main()
{
 func();

 return 0;
}

이거 .. 미분하는 double differential 함수에 다시 대입이 되면 값이 이상하게 나오는데
여기 미분하는 공식을 코드로 만든거 있나요? 아 짜증나넴 ㅋ 하다가 빡침 ㅋㅋ