0

我正在使用 c++ 中的clock_t 函数进行测试,但遇到了一个问题。当我编译时,我在 2 个不同的编译器上进行。我的 Windows 7 计算机(2012)上的 Visual Studio,以及名为“ranger”的 Unix 系统上的 g++。当我刚刚编译我的代码以尝试以秒为单位输出运行不同排序函数所需的时间(最多千分之一秒)时,g++ 编译器似乎完全忽略了我将时间戳除以 1000 的尝试以便将其从毫秒转换为第二种格式。有什么建议吗?g++ 和 Visual Studio 的编译器在这方面有区别吗?

一个简短的代码片段(输出和我为除法所做的事情):

//Select Sort

begin = clock(); //Begin time
selectionSort(array, n);
end = clock(); //End time
d_select = ((float)(end/1000.0) - (float)(begin/1000.0)); //Calculates the time in MS, and converts from MS, to a float second.

//Output data
cout << setprecision(3) << fixed; //Set precision to 3 decimal places, with a fixed output (0's are displayed regardless of rounding)
cout << n << "\t" << d_bubble << "\t" << d_insert << "\t" << d_merge << "\t" << d_quick << "\t"
    << d_select << endl;

Visual Studio 输出(正确):

n       Bubble      Insert      Merge       Quick       Select  
100000  12.530      1.320       0.000       0.030       2.900

Unix输出(不正确):

n       Bubble      Insert      Merge       Quick       Select  
100000  51600.000   11700.000   30.000      150.000     18170.000

有什么建议么?谢谢!

4

1 回答 1

1

除以CLOCKS_PER_SEC,而不是 1000。在 Unix 和一般的 POSIX 上,clock()给出以微秒为单位的值,而不是毫秒。

请注意, 和clock_t是整数;因此,如果您想要小数秒,请在除法之前转换为浮点格式:

d_select = float(end - begin) / CLOCKS_PER_SEC;
于 2014-10-08T00:57:26.893 回答