linux clock函數使用方法

C語言中求程序執行的時間可以使用clock()函數,_CRTIMP clock_t __cdecl __MINGW_NOTHROW clock (void);(可以把它直接視爲clock_t clock(void);)
這個函數返回從“開啓這個程序進程”到“程序中調用clock()函數”時之間的CPU時鐘計時單元(clock tick)數,其中clock_t是用來保存時間的數據類型,在time.h文件中,我們可以找到對它的定義:
#ifndef _CLOCK_T_DEFINED 
typedef long clock_t; 
#define _CLOCK_T_DEFINED 
#endif 
很明顯,clock_t是一個長整形數。在time.h文件中,還定義了一個常量CLOCKS_PER_SEC,它用來表示一秒鐘會有多少個時鐘計時單元,其定義如下: 
#define CLOCKS_PER_SEC ((clock_t)1000) 
可以看到每過千分之一秒(1毫秒),調用clock()函數返回的值就加1。
下面給出一個示例:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main()
{
    long i=10000000L;
    clock_t start,finish;
    double TheTimes;
    printf("做%ld次空循環需要的時間爲",i);
    start=clock();
    while(i--);
    finish=clock();
    TheTimes=(double)((finish-start)/CLOCKS_PER_SEC);
    printf("%f秒。\n",TheTimes);
    return 0;
}

可是運行完每次的結果都爲:

 

做10000000次空循環需要的時間爲0.000000秒。

Process returned 0 (0x0)   execution time : 0.438 s
Press any key to continue.
加大循環次數也不行。

最後終於找到的問題所在:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main()
{
    long i=10000000L;
    clock_t start,finish;
    double TheTimes;
    printf("做%ld次空循環需要的時間爲",i);
    start=clock();
    while(i--);
    finish=clock();
    TheTimes=(double)(finish-start)/CLOCKS_PER_SEC;
    printf("%f秒。\n",TheTimes);
    return 0;
}
看紅色行和上面的區別,現在明白了吧!是由於括號運算符改變了運算的優先級,將裏面的四則運算變成了整數之間的除法,造成位數被捨去,造成的誤差。
原文鏈接:https://blog.csdn.net/wangluojisuan/article/details/7043667

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章