小弟最近在慕课网上,学习浙江大学开设的数据结构课。
其中有一道简单的题目:分别用传统方法和秦久韶法计算下面多项式,比较所用时间
//传统
public static double polyNormal(double input) {
double sum = 0.0;
for (int i = 1; i < 101; i++) {
sum += Math.pow(input, i) / i;
}
sum += 1;
return sum;
}
//秦久韶
public static double polyNine(double input) {
double sum = 0.01;
for (int i = 99; i > 0; i--) {
sum = sum * input + 1/ i;
}
sum = sum * input + 1;
return sum;
}
遇到问题:
秦久韶法的结果一直没有算对
出错原因:
一步一步的调试下找到了问题的所在,就是这一句
sum = sum * input + 1/ i;
其中sum是double类型,i是for循环中的int类型,0<i<100。
因此,1/i也是int类型,由于1/i的值一直小于1,取整之后就为0.
解决方案:
将1/i修改成1.0/i,这样才是double类型,值才会是随着i改变的小数。
后话:
菜菜菜,要注意基础知识!