<mark>第一个fx是多项式的一般式,第二个是秦九韶公式。。</mark>
秦九韶公式效率更高,更快。
<mark>接下来说一下ctime的计时工具:</mark>
ctime里定义的CLK_TCK,其值每个电脑不一样,我的电脑输出它后显示1000;
clock_t start,stop; clock_t这个是数据类型,定义了两个变量用来存储起始时间和终止时间。
timee=((double)(stop-start))/CLK_TCK; 终点减去起点转换为double再除以CLK_TCK将其转换为秒数。
start=clock();//计算从main函数到当前的时间
stop=clock();//计算main函数到当前的时间
clock()函数在ctime头文件中定义。
注意:计算函数运行时间最好将函数放在start和stop之间。
输出时间是最好%e,用科学计数法表示。若输出结果为零,是因为时间实在太短,介意将其放入循环重复执行,最后再除以循环次数即可。。
#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <queue>
#include <ctime>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long ll;
#define maxn 10005
#define mod 7654321
//普通算法
double f(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 ff(int n,double a[],double x)
{
double p=a[n];
for(int i=n;i>0;i--)
{
p=a[i-1]+x*p;
}
return p;
}
//clock()函数 头文件为ctime
//clock_t是clock()函数的类型 start和stop是该类型的两个变量
clock_t start,stop;
//存储秒数
double timee;
int main()
{
//在start和stop之间放函数测时间
double a[101];
double x=1.5;
for(int i=0;i<=100;i++)
{
a[i]=double(i);
}
start=clock();//计算从main函数到当前的时间
for(int i=0;i<1e7;i++)
f(100,a,x);
stop=clock();//计算main函数到当前的时间
timee=((double)(stop-start))/CLK_TCK;//计算秒数 ctime里定义的CLK_TCK
//cout<<CLK_TCK<<endl;
printf("ticks=%.6lf\n",(double)(stop-start));
printf("timee=%6.2e\n",timee);
start=clock();
for(int i=0;i<1e7;i++)
ff(100,a,x);
stop=clock();
timee=((double)(stop-start))/CLK_TCK/1e7;
printf("ticks=%.6lf\n",(double)(stop-start));
printf("timee=%6.2e\n",timee);
return 0;
}