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

来源:互联网 发布:ubuntu nvidia 分辨率 编辑:程序博客网 时间:2024/06/03 18:57
/* 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[n];    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);  }