有关clock()函数
1,clock()函数在头文件#include<time.h>中
2,clock()函数的返回值类型为clock_t。clock_t其实是long,即长整形。
clock_t是用来保存时间的数据类型,typedef long clock_t。
3,clock()函数的功能:从程序被调用,创建程序进程到clock()函数调用之间的cpu时间计时单位
4,常量CLOCKS_PER_SEC,他表示一秒钟有多少个时钟计时单位。
#define CLOCK_PER_SEC ((clock_t)1000)
5. 注意: (1) clock()函数范围的时间单位是ms(毫秒)。 (2) 现在的机器运算速度很快,当用clock()函数记录算法的效率时,不一定有效,可能得到的结果为0。可以尝试多次调用,这个“多”就自己去尝试吧//利用蒙特卡罗算法计算半径为 1 单元的球体体积: //(1)串行执行程序为: #include<iostream> #include<stdlib.h> #include<time.h> using namespace std; int main() { long int max=10000000; long int i,count=0; double x,y,z,bulk,start_time,end_time; start_time=clock(); time_t t; srand((unsigned) time(&t));//函数产生一个以当前时间开始的随机种子 for(i=0;i<max;i++) { x=rand(); //生成0~RAND_MAX之间的一个随机数,其中RAND_MAX 是stdlib.h 中定义的一个整数,它与系统有关。 /* RAND_MAX是VC中stdlib.h中宏定义的一个字符常量: #define RAND_MAX 0x7FFF 其值最小为32767,最大为2147483647 通常在产生随机小数时可以使用RAND_MAX。*/ x=x/32767; y=rand(); y=y/32767; z=rand(); z=z/32767; if((x*x+y*y+z*z)<=1) count++; } bulk=8*(double(count)/max); end_time=clock(); cout<<"球体的体积为"<<bulk<<endl; cout<<"运算时间为"<<(end_time-start_time)<<endl; return 0; } //在四核服务器上执行结果为:球体体积为 4.18862,运算时间为 1703ms。 //(2)并行执行程序:利用 for 语句和归并语句对程序进行并行化。 #include<stdlib.h> #include<time.h> #include <stdio.h> int main() { long long max=10000000; long long i,count=0; double x,y,z,bulk,start_time,end_time; start_time=clock(); time_t t; srand((unsigned) time(&t));//函数产生一个以当前时间开始的随机种子 #pragma omp parallel for private(x,y,z) reduction(+:count) for(i=0;i<max;i++) { x=rand(); x=x/32767; y=rand(); y=y/32767; z=rand(); z=z/32767; if((x*x+y*y+z*z)<=1) count++; } bulk=8*((double)(count)/max); end_time=clock(); printf("球体的体积为%0.8f\n",bulk); printf("运算时间为%0.8f s\n",(end_time-start_time)/1000); return 0; } //在四核服务器上执行结果为:球体体积为 4.18861,运算时间为 406ms。