1

我正在对图形中的搜索(在邻接列表和邻接矩阵之间)进行性能测试,以计算整个图形的平均遍历时间(以毫秒为单位)。

但是,输出给出了一个我以前从未见过的数字。这是简单的测试算法。

   double startTime;
   double endTime;
   double processTime;

   double totalTime = 0;
   double averageTime = 0;

    for (int i = 0; i < 100000; i++) {


        startTime = System.nanoTime();

        search.DFS(5);

        endTime = System.nanoTime();

        processTime = (endTime - startTime)/1000000;

        totalTime = totalTime + processTime;
    }

    averageTime = totalTime/100000;

    System.out.println("PROCESS TIME in AdjacencyMatrix = " + averageTime + " ms");

输出看起来像;

PROCESS TIME in AdjacencyMatrix = 1.4765902999997995E-4 ms

当我只遍历一次时,输出会提供方便的数据,例如0.032344 ms.

4

2 回答 2

3

该数字简单地写为浮点数。

1.4765902999997995E-4 = 0.000147659...

所以因为它是一个非常小的数字,所以输出是浮点格式,以便于阅读。

编辑:澄清浮点数。这只是一种写数字的方式,通常被称为“科学记数法”。这只是编写非常大或非常小的数字的一种不同且方便的方法。在学校你可能会遇到类似的事情:

3,000,000 = 3 * 10^6 = 3E6

1,456,000,000,000 = 1.456 * 10^12 = 1.456E12

所以“E”只是表示*10^。如果数字很小,则在 E 之后使用负数,如下所示:

0,04653 = 4.653 * 10^-2 = 4.653E-2

0,00000134 = 1.34 * 10^-6 = 1.34E-6

0.000000000000000018 = 1.8 * 10^-17 = 1.8E-17

如果你想要更多的例子,你可以在这篇维基百科文章右上角的框

于 2013-06-24T16:04:06.947 回答
3

即使你使用 double 你仍然可以得到精度错误。基本上,浮点数总是十次方的数字之和。这意味着并非所有数字都可以精确保存。我猜这就是你的问题所在。

作为解决方案:long用于您的变量,这是System.nanoTime(). 此返回的数字始终是整数。

于 2013-06-24T16:05:54.817 回答