为什么我的多项式方法在小数组中工作正常但在大数组中出错?

Why does my polynomial method work correctly in small arrays but wrong in bigger ones?

double my_poly(double a[], double x, int degree){
   long int i;
   double result = a[0];
   double xpwr= 1/x;
   for(i=1; i<degree;i+=2){
      xpwr = x * x * xpwr;
      result = result + ((a[i] + (a[i+1] * x)) * xpwr); 
   }    
   return result;
}

上面的代码为小型数组生成了正确的值。但是当我使用大小为 1000 的数组时,结果出错了。拜托,你能帮帮我吗?

编辑: 我已经按照建议检查了;

double b[4] = {1,2,4,5};
printf("%f\n", poly(b,2,3));
printf("%f\n", my_poly(b,2,3));

输出:

61.000000
21.000000

根据@Ian Abbott 的评论,我在 return 语句之前添加了这个代码块,以满足偶数和奇数度数:

for(; i<=degree;i++){
    xpwr = x * x * xpwr;
    result += a[i] * xpwr;   
 }

所以测试输出是一致的。

printf("%f\n", poly(a,2,999));
printf("%f\n", my_poly(a,2,999));

产量:

61.000000
61.000000

在 return 语句之前添加该代码块解决了我的问题。

for(; i<=degree;i++){
    xpwr = x * x * xpwr;
    result += a[i] * xpwr;   
 }