讨论1.3 再试一个多项式
讨论题目: 给定另一个100阶多项式 ,用不同方法计算并且比较一下运行时间?
function1: 用下图公式。
function2: 顺推相加。
代码展示:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double x = scanner.nextDouble();
DecimalFormat df = new DecimalFormat("#00.00000##E0");
// 循环执行次数
double a = 1e7;
// function1开始时间
long stime = System.currentTimeMillis();
// 执行循环体
for (int i = 0; i < a; i++) {
function1(x);
}
// function1结束时间
long etime = System.currentTimeMillis();
System.out.println(function1(x));
// function1计算执行时间
System.out.print("(QJS)消耗时长更小的执行时长:" + df.format((etime - stime) / a));
System.out.println();
long stime2 = System.currentTimeMillis();
for (int i = 0; i < a; i++) {
function2(x);
}
long etime2 = System.currentTimeMillis();
System.out.println(function2(x));
System.out.print("消耗时长更大的执行时长:" + df.format((etime2 - stime2) / a));
}
private static double function1(double x) {
double p = 1.0 / 100; // 注意是1.0作为分母!!!
for (int i = 100; i > 1; i--) {
p = (1.0 / (i - 1)) + (x * p); // 注意是1.0作为分母!!!此处是+号!
}
p = p * x + 1;
return p;
}
private static double function2(double x) {
double p = 1;
for (int i = 1; i <= 100; i++) {
p += Math.pow(x, i) / i;
}
return p;
}
执行结果展示:(java差了三个数量级 ?!?)