在Math.pow()和使用*运算符之间多次处理哪一个更快?

时间:2014-05-11 17:14:40

标签: java

我正在编写一个java程序,它可以为权力提供不同的数字。在Math.pow(8,4)和8 * 8 * 8 * 8之间,哪一个需要更短的时间来处理?

4 个答案:

答案 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)

这两个函数都将在编译时计算,并具有相同的效率。