#include<time.h>
#include<math.h>
clock_t start,stop;
/* clock_t是clock()函数返回的变量类型*/
double duration;
/* 记录被测函数运行时间,以秒为单位 */
double f1(int n,double a[],double x);
double f2(int n,double a[],double x);
int main()
{
int i;
double a[MAXN];
for(i=0;i<MAXN;i++) a[i]=(double) i;
start=clock();
/* 开始计时 */
f1(MAXN-1,a,1.1);
/* 把被测函数加在这里 */
stop=clock();
/* 停止计时 */
duration=((double)(stop-start))/CLK_TCK;
/* 计算运行时间 */
printf("ticks1=%f\n",(double)(stop-start));
start=clock();
f2(MAXN-1,a,1.1);
stop=clock();
duration=((double)(stop-start))/CLK_TCK;
printf("ticks2=%f\n",(double)(stop-start));
printf("duration2=%6.2e\n",duration);
return 0;
}
double f1(int n,double a[],double x)
{ int i;
double p=a[0];
for(i=1;i<=n;i++)
p+=(a[i]*pow(x,i));
return p;
}
double f2(int n,double a[],double x)
{ int i;
double p=a[n];
for(i=n;i>0;i--)
p=a[i-1]+x*p;
return p;
}
让被测函数重复运行充分多次,使得测出的总的时钟打点
间隔充分长,最后计算被测函数平均每次运行的时间即可
#include<stdio.h>
#include<time.h>
#include<math.h>
#define MAXN 10
#define MAXK 1e7/* 被测函数最大重复调用次数*/
clock_t start,stop;
double duration;
double f1(int n,double a[],double x);
double f2(int n,double a[],double x);
int main()
{
int i;
double a[MAXN];
for(i=0;i<MAXN;i++) a[i]=(double) i;
start=clock();
for(i=0;i<MAXK;i++) /*重复调用函数以获得充分多的时钟打点数*/
f1(MAXN-1,a,1.1);
stop=clock();
duration=((double)(stop-start))/CLK_TCK/MAXK; /*计算函数单次运行的时间 */
printf("ticks1=%f\n",(double)(stop-start));
printf("duration1=%6.2e\n",duration);
start=clock();
for(i=0;i<MAXK;i++)
f2(MAXN-1,a,1.1);
stop=clock();
duration=((double)(stop-start))/CLK_TCK/MAXK;
printf("ticks2=%f\n",(double)(stop-start));
printf("duration2=%6.2e\n",duration);
return 0;
}
double f1(int n,double a[],double x)
{ int i;
double p=a[0];
for(i=1;i<=n;i++)
p+=(a[i]*pow(x,i));
return p;
}
double f2(int n,double a[],double x)
{ int i;
double p=a[n];
for(i=n;i>0;i--)
p=a[i-1]+x*p;
return p;
}