我正在编写一个java程序,它可以为权力提供不同的数字。在Math.pow(8,4)和8 * 8 * 8 * 8之间,哪一个需要更短的时间来处理?
答案 0 :(得分:0)
检查这个小代码
long pr=1;
long st=System.currentTimeMillis();
for(int i=0;i<200_00_00_000;i++)
pr=pr*8;
long en=System.currentTimeMillis();
System.out.println("Executiom time : "+(en-st));
它将为您提供此代码的执行时间
对 Math.pow(8,200_00_00_000)执行相同操作并自行查找差异。
P.S :Math.pow()
执行得更快。
答案 1 :(得分:0)
电源功能的效率大于循环。您可以通过以下方式检查每个功能的时间: -
double i=10;
java.util.Date dt=new java.util.Date();
double z=(long) Math.pow (8,i);
java.util.Date dt1=new java.util.Date();
System.out.println("Using Power formula:"+(dt1.getTime()-dt.getTime()));
double t=1;
for(double k=1;k<=i;k++){
t*=8;
}
java.util.Date dt2=new java.util.Date();
System.out.println("Using loop :"+(dt2.getTime()-dt1.getTime()));
答案 2 :(得分:0)
对于像8 ^ 4这样的简单操作,手动乘法会更快。使用jmh的微基准显示(纳秒/操作):
Benchmark Mode Thr Cnt Sec Mean Mean error Units
c.a.p.SO23595573.mult avgt 1 3 2 3.074 0.022 nsec/op
c.a.p.SO23595573.pow avgt 1 3 2 68.696 0.186 nsec/op
代码:
private int x = 8;
private int y = 4;
@GenerateMicroBenchmark
public double mult() {
double result = x;
for (int i = 0; i < y - 1; i++) {
result *= x;
}
return result;
}
@GenerateMicroBenchmark
public double pow() {
return Math.pow(x, y);
}
答案 3 :(得分:-1)
这两个函数都将在编译时计算,并具有相同的效率。