2014-08-28 58 views
0

任何人都可以告訴我,如果我錯過下面兩行會發生什麼?c程序計算執行時間錯誤?

time_spent = (double)(end - begin)/CLOCKS_PER_SEC; 

我試圖計算運行我的排序問題的時候,忘了強制轉換爲加倍。代碼運行了將近90分鐘,但輸出時間爲「270.000006」。任何人都可以請幫助我弄清楚這個270表示什麼?

此外它有時會顯示「-ve」值。任何解決這個問題的方法。

編輯 - 我排序10^9和10^10的數字,所以代碼將運行幾個小時。

+0

你如何得到最終值和開始值以及它們是什麼類型? – 2014-08-28 08:15:08

+0

我已經使用了Debasish在下面提到的相同的代碼。 – Anurag 2014-08-28 08:42:39

回答

5

如果代碼運行將近90分鐘,您將在32分鐘的體系結構中在72分鐘內溢出clock_t類型。我確實相信這是你的情況。

+0

是否有避免這種溢出? – Anurag 2014-08-28 08:41:27

+0

@Auurag在你已經完成的運行中,我猜你可以試着弄清楚它溢出了多少(猜測溢出了「一次」),然後假設它的值+最大值。爲了將來修復,你當然必須將它保存到一個可以適合結果的變量。 – Jite 2014-08-28 08:51:54

+0

@Jite。將長期雙重工作罰款? – Anurag 2014-08-28 08:55:18

0

正確的用法是:

clock_t begin, end; 
    double time_spent; 

    begin = clock(); 
    /* actual task that needs to be monitored */ 
    end = clock(); 
    time_spent = (double)(end - begin)/CLOCKS_PER_SEC; // in seconds 

您在這裏測量CPU時間,而不是經過的時間,其中包括I/O時間爲好。 CLOCKS_PER_SEC是一個在其中聲明的常量。計算需要在浮點運算中完成。 計算計時的另一種方法是使用時間命令。

閱讀How to log the time taken for a unix command?

+0

他知道,這不是他要求的。他問,如果他**不會**將它/類型轉換爲雙精度型,會發生什麼情況。 – Jite 2014-08-28 08:31:38

+0

如果你沒有進行雙倍轉換,那麼由於整數運算,你會失去精度 – 2014-08-28 08:35:34

+0

是或者更壞,會溢出,這更像是他的問題的答案。 – Jite 2014-08-28 08:49:03