gpt4 book ai didi

java - 函数的开始和停止时间不断返回 0 或 1

转载 作者:行者123 更新时间:2023-12-02 01:20:05 25 4
gpt4 key购买 nike

我正在做一项家庭作业,我们正在使用 10 位素数测试几个算法(最大公约数,即 GCD)的运行时间。

我们将以毫秒为单位捕获运行时间,我使用 System.currentTimeMillis() 捕获。

我的方法是有一个开始时间变量和一个停止时间变量,然后在另一个变量中找到这两个变量之间的差异。

到目前为止,它对于一种方法完美工作,但对于另一种方法返回 0 或 1。

我检查了调试器,它似乎工作正常,但是当我运行它时,它返回 0 或 1。

这是我正在使用的变量和主要方法。注释掉的行按预期工作,但 fastgcd 方法是返回 0 或 1 的方法。

public class GCD {

public static long startTime;
public static long stopTime;
public static long elapsedTime;

public GCD(){

}

public static void main(String[] args){
startTime = System.currentTimeMillis();

//System.out.println(gcd(3267000013L, 1500450271L));
System.out.println(fastgcd(3267000013L, 1500450271L));

stopTime = System.currentTimeMillis();
elapsedTime = stopTime - startTime;
System.out.println(Long.toString(elapsedTime));
}

这是有效的方法:

public static String gcd(long a, long b) {
long n = Long.min(a, b);
for (long i = n; i >= 1; i--) {
if (a % i == 0 && b % i == 0) {
return "Done";
}
}
// If error
return null;
}

这是行不通的方法:

public static String fastgcd(long a, long b){
if(b == 0){
return "Done";
}
else{
return fastgcd(b, a%b);
}
}

因此,对于有效的方法,对于 10 位数字,我会得到 12000 - 12500 毫秒之间的某个值。

fastgcd 方法返回 0 或 1 毫秒,这是不正确的,尤其是 10 位素数。

不知道哪里出了问题...

最佳答案

您的代码很好(就获取时间而言),并且您获得的值是“正确的”。您测量的是挂钟时间(请参阅 here ),这本质上有点不准确,而且也不够精细,无法测量与您的 fastgcd 方法一样快运行的代码。

要高精度测量耗时,请使用 System.nanoTime() 而不是 System.currentTimeMillis()

关于java - 函数的开始和停止时间不断返回 0 或 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57876250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com