2014-10-08 83 views
0

我正在使用C++中的clock_t函數進行測試,並且遇到了一個問題。當我編譯時,我在兩個不同的編譯器上進行編譯。我的Windows 7計算機上的Visual Studio(2012)以及稱爲「ranger」的Unix系統上的g ++。當我編譯我的代碼試圖以秒爲單位輸出時間(高達千分之一秒)時,它需要運行不同的排序函數,似乎g ++編譯器完全忽略了我試圖將時間戳記除以1000爲了將其從毫秒轉換爲第二種格式。有什麼建議?在這方面,g ++和Visual Studio的編譯器有區別嗎?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 

有什麼建議嗎?謝謝!

回答

1

除以CLOCKS_PER_SEC,而不是1000.在Unix和POSIX中,clock()給出的值以微秒爲單位,而不是毫秒。

請注意,和clock_t是整數;所以如果你想秒的小數部分轉換爲浮點格式分割前:

d_select = float(end - begin)/CLOCKS_PER_SEC; 
+0

這樣做,它似乎只給我一個整數答案,所以這需要任何形式的功能不到一秒鐘(這通常會給我一些像546 MS這樣的例子)現在只會給我0.000作爲「結果」,好像它根本沒有時間。是否沒有一種通用的「從時間到數秒的轉換」呼叫,我可以做到? – 2014-10-08 01:12:01

+0

@DavidRutledge:因此轉換爲分區的浮點格式,例如'浮子(端開始)/ CLOCKS_PER_SEC'。 – 2014-10-08 01:14:01

+0

aha!似乎我的浮動轉換沒有按照我想要的方式工作(我只是用CLOCKS_PER_SEC替換了我的代碼中的1000)。然而,用你寫的方式似乎是做到了這一點。非常感謝你!似乎我在今天學到了Unix和Microsoft編譯器的另一個區別。 – 2014-10-08 01:19:07