Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Math.pow()和多次使用*运算符之间,哪一种处理速度更快?_Java - Fatal编程技术网

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

Java 在Math.pow()和多次使用*运算符之间,哪一种处理速度更快?,java,Java,我正在写一个java程序,它可以将不同的数字提升到幂。在Math.pow(8,4)和8*8*8*8之间,哪一个需要更短的处理时间?这两个函数都将在编译时计算,并且具有相同的效率。检查这段小代码 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("Ex

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

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

检查这段小代码

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));
long pr=1;
long st=System.currentTimeMillis();

对于(int i=0;i幂函数的效率大于循环。您可以通过以下方式检查每个函数所用的时间:-

    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()));
double i=10;
java.util.Date dt=new java.util.Date();
double z=(长)Math.pow(8,i);
java.util.Date dt1=新的java.util.Date();
System.out.println(“使用幂公式:”+(dt1.getTime()-dt.getTime());
双t=1;

对于(double k=1;k对于8^4这样的简单操作,手动乘法会更快。使用shows(纳秒/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);
}
private int x=8;
私人智力y=4;
@生成标记
公共双mult(){
双结果=x;
对于(int i=0;i
您是否已经尝试过执行这两种计算,比如说使用
for
循环执行1000000次?(只是为了比较执行时间)好吧,考虑到他们在做同样的事情…@xav我没有尝试使用大数字。让我尝试一下,然后再联系你。有什么方法可以检查计算函数所用的时间吗?这是另一个问题。你试图得到什么?我尝试过使用大数字和计时器,但我看不到明显的差异。我只是想合作确认差异的过程,在使用一个或两个数字进行操作时,您不会得到它。创建一个位数据集:1_000_000,例如,请让我试试。谢谢-1您的测量有缺陷(没有预热,您不使用操作结果等)。另请参阅@assylias Thanx以获取链接:)你无法用日期来衡量如此快速的操作…另请参见
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);
}