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;
}
看紅色行和上面的區別,現在明白了吧!是由於括號運算符改變了運算的優先級,將裏面的四則運算變成了整數之間的除法,造成位數被捨去,造成的誤差。
看來細節還是很重要的。
寫出來和大家分享。
轉載地址:http://blog.csdn.net/wangluojisuan/article/details/7043667