如何从长值中获取更多有效数字?

时间:2013-11-09 06:30:29

标签: java performance

我正在尝试打印elapsed所持有的长值,有人可以帮我解决如何操作的格式吗?

这会打印0.0

但我知道它有更多有效数字(可能像.0005324或其他东西)

System.out.println("It took " + (double)elapsed + " milliseconds to complete SELECTION_SORT algorithm.");

    System.currentTimeMillis();
    long start = System.currentTimeMillis();
    int sortedArr[] = selectionSort(arr1);
    long elapsed = System.currentTimeMillis() - start;


    System.out.println("\n///////////SELECTIONSort//////////////");
    System.out.println("\nSelection sort implemented below prints a sorted list:");
    print(sortedArr);
    System.out.printf("It took %.7f ms....", elapsed);

    //System.out.println("It took " + (double)elapsed + " milliseconds to complete SELECTION_SORT algorithm.");'

    private static int[] selectionSort(int[] arr) {

    int minIndex, tmp;
    int n = arr.length;
    for (int i = 0; i < n - 1; i++) {
        minIndex = i;
        for (int j = i + 1; j < n; j++)
            if (arr[j] < arr[minIndex])
                minIndex = j;
        if (minIndex != i) {
            tmp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = tmp;
        }
    }
    return arr;

}'

4 个答案:

答案 0 :(得分:2)

更改格式不会给你更多的分辨率,如果你用7位数字打印1 ms你每次只得到1.0000000就会产生真正的问题。这对你没有任何帮助。

您需要的是高分辨率计时器

long start = System.nanoTime();
int sortedArr[] = selectionSort(arr1);
long elapsed = System.nanoTime() - start;

System.out.println("\n///////////SELECTIONSort//////////////");
System.out.println("\nSelection sort implemented below prints a sorted list:");
print(sortedArr);
System.out.printf("It took %.3f ms....", elapsed / 1e6);

但是,如果你这样做,一旦你自欺欺人,因为Java动态编译代码并且速度越快你运行它就越多。它可以快100倍或更快,使你看到的第一个数字毫无用处。

通常情况下,我建议您多次运行循环,忽略前10,000次。这将改变结果,以至于您将看到第一个数字完全错误。我建议你试试这个

for(int iter = 1; iter<=100000; iter *= 10) {
    long start = System.nanoTime();
    int[] sortedArr = null
    for(int i=0;i<iter;i++) 
        sortedArr = selectionSort(arr1);
    long elapsed = System.nanoTime() - start;

    System.out.println("\n///////////SELECTIONSort//////////////");
    System.out.println("\nSelection sort implemented below prints a sorted list:");
    print(sortedArr);
    System.out.printf("It took %.3f ms on average....", elapsed / 1e6 / iter);
}

通过长时间运行代码,您将看到结果提高10倍甚至100倍。

答案 1 :(得分:1)

您可以使用print formatting。对于doublefloat,要获得小数点后的7个位置,您可以这样做:

System.out.printf("It took %.7f ms....", elapsed);

修改
您实际上使用的是long,而不是double,因此您无法使用有效数字,因为long仅采用整数值。

答案 2 :(得分:0)

试试这个:  的String.format( “%7F”,的longValue); 通过使用上面的行,您可以格式化您的长或任何浮点数。这里有7个被称为'。'之后你想要多少位数。

答案 3 :(得分:0)

long是一个整数值,没有小数位。

要获得运行时的近似值,请在循环中运行相同的排序,例如1000次,然后将测量的时间除以1000.

例如:

System.out.println("It took " + ((double)elapsed) / NUMBER_OF_ITERATONS);