您的位置:首页 > 理论基础 > 数据结构算法

计算多项式的值(秦九昭算法,clock()函数的使用)

2017-11-18 20:15 260 查看
/* clock()函数使用模板

clock():捕捉从程序开始运行到clock()被调用所消耗的时间。这个时间单位是clock tick。
常数CLK_TCK:机器时钟每秒所走的时钟打点数
clock_t是clock()函数返回的变量类型
duration记录被测函数运行时间,以秒为单位

#include <stdio.h>
#include <time.h>
clock_t start,stop;
double duration;

int main()
{
//不在测试范围内的准备工作写在clock()调用之前,例如输入处理之类
start=clock();//start存储从main函数开始被调用到clock()被调用所走的ticks
Myfunction();
stop=clock();//stop存储从main函数开始被调用到这个clock()被调用所走的ticks
duration=((double)(stop-start))/CLK_TCK;
//其他不在测试范围内的处理写在后面,例如输出处理之类
return 0;
}

*/

//假设多项式f(x)=0*x^0+1*x^1+2*x^2+...+9*x^9
#include <stdio.h>
#include <time.h>
#include <math.h>
clock_t start,stop;
double duration;
#define MAXN 10//多项式最大项数,即多项式阶数+1
#define MAXK 1e7//被测函数最大重复调用次数

//一种比较慢的常规方法
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
;
for(i=n;i>0;i--)
p=a[i-1]+x*p;
return p;
}
//让被测函数重复运行充分多次,使得测出的总的时钟打点间隔充分长,最后计算平均每次运行的时间即可
int main()
{
int i;
double a[MAXN];//存储多项式系数
for(int i=0;i<MAXN;i++)
a[i]=(double)i;

start=clock();
for(int 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(int i=0;i<MAXK;i++)
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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构与算法