为什么我的多项式方法在小数组中工作正常但在大数组中出错?
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;
}
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;
}