关于clock()函数计时


     clock tick:时钟计时单元(而不把它叫做时钟滴答次数),一个时钟计时单元的时间长短是由CPU控制的, 一个clock tick不是CPU的一个时钟周期,而是C/C++的一个基本计时单位。

 

     clock函数:clock_t clock(); 这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间 的CPU时钟计时单元 (clock tick)数,在MSDN中称之为挂钟时间(wal-clock)。可以通过,clock值除以CLOCK_PER_SEC(将其define为1000)

     clock_t定义: 

#ifndef _CLOCK_T_DEFINED
      typedef long clock_t;
      #define _CLOCK_T_DEFINED
#endif
#define CLOCKS_PER_SEC ((clock_t)1000):

代码:

  

#include <stdio.h>
#include <time.h>

int binsearch(int x, int v[], int n);

int main()
{

	int num[11] = {0,-5,3,63,9,4,7,6,8,5,10};
	int tag = 8;
	int res;
	clock_t start;
	clock_t finish;

	start = clock();
	res = binsearch(tag, num, 11); 
	finish = clock();
	printf("%ld, %ld/n", start, finish);
	printf("%d/n%f/n", res, (double)(finish - start) / CLOCKS_PER_SEC);
							//而非(double)((finish - start) / CLOCKS_PER_SEC)

	return 0;
}

int binsearch(int x, int v[], int n)		//折半查找
{
	long time = 40000000;
	int low = 0;
	int high = n-1;
	int mid;

	while(time--)
		;
	while(low <= high)
	{
		mid = (low + high) / 2;
		if(x < v[mid])
			high = mid - 1;
		else if(x > v[mid])
			low = mid + 1;
		else
			return mid;
	}

	return -1;
}

/*#include <stdio.h>
#include <time.h>

int main()
{

	long i = 10000000;
	clock_t start;
	clock_t finish;

	start = clock();
	while(i--)
		;
	finish = clock();
	printf("%f/n",(double)(finish - start) / CLOCKS_PER_SEC);
				//执行完while循环一共花费0.031s,即31个时钟计时单元
				//每个时钟计时单元执行了322580次循环。

	return 0;
}*/
可以看到每过千分之一秒(1毫秒),调用clock()函数返回的值就加1

   分析:L20:如果写成(double)((finish - start) / CLOCKS_PER_SEC)这种形式,一般情况下这个值会为0.0000

             因为finish start CLOCKS_PER_SEC均为long型变(常)量,若finish-start < 1000,则

             (finish - start) / CLOCKS_PER_SEC = 0,再将其强制转换为double型数据,得到0.0000。

             如果写成(double)(finish - start) / CLOCKS_PER_SEC,先会将finish - start转换成double型

             数据,然后执行"/"操作,则编译器自动将CLOCKS_PER_SEC提升为double型,故而是两个double数据相除

             能得到正确结果。

 

        L33:Q:为什么要加上while(i--);?

             A:本机测试到每个时钟计时单元执行了322580次上述循环,如果不加这个循环,则在瞬间就会执行完

                binsearch函数,这样得到的start,finish数值会是一样的,故而(finish - start) = 0,

                这样会得到执行函数binsearch函数所花费的时间为0,显然这是不对的。

原文:http://blog.csdn.net/roma823/article/details/6403573
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值