Добрый день! Помогите пожалуйста найти ошибку в программе, битый день делаю, я новичок, но как мне кажется очень логично написал код. Программа работает, но по непонятной причине выдаёт повторяющиеся значения. Где могла закрасться ошибка
задание: построить интерполяционный полином Лагранжа для функции 

 на интервале [-2, 3], количество точек, в которых определена функция m = 4. Таблица исходной фунции вычисляется в точках 

, i = 0,...,m. Используя полученную таблицу требуется вычислить значения функции, полинома и невязки в точках 

, j = 0,...,9.
получилась программа:
Код:
double lagrange(double _x);
double func(double _x);
int main( void )
{
  setlocale(LC_ALL, "Russian");
  int a=-2, b=3, m=4;
  double X[9], Nevyazka[9];
    for (short j=0; j<=9; j++)
   {
      X[j]=a+j*(b-a)/9;
      Nevyazka[j]=fabs(lagrange(X[j])-func(X[j]));
      cout<<"f(X"<<j<<")="<<func(X[j])<<";\t"<<"L(X"<<j<<")="<<lagrange(X[j])<<";\t"<<"Невязка  "<<Nevyazka[j]<<";\n";
   }
      getch();   
    return (0);
}
double lagrange(double _x)
{
        double L = 0, P = 1, x[5], y[5];
      int a=-2, b=4;
      short n=4;
      //double x[5] = {-2, -0.75, 0.5, 1.75, 3};
      //double y[5] = {-1.64, 1.77, -1.36, 0.11, 11.01};
      for (short i = 0; i < n; i++)
      {
         x[i]=a+(i*(b-a))/n;
          y[i]=4*x[i]-7*sin(x[i]);
      }
      for (short i = 0; i < n; i++)
        {    
         for (short j = 0; j < n; j++)
            {
             if (j - i)
                 P *= (_x - x[j])/ (x[i] - x[j]);
              }
             L += P * y[i];
        }       
 
        return L;
}
double func(double _x)
{
   return 4*_x-7*sin(_x);
}
