计算给定多项式在给定点x的值
对比所用的两种方法
double f1(double a[],int n,double x)
{
double result;
result=a[0];
int i;
for(i=1;i<n;i++){
result+=a[i]*power(x,i);
}
return result;
}
/***************************
double f2(double a[],int n,double x)
{
double result=a[n];
int i;
for(i=n;i>=1;i++){
result=a[i-1]+x*result;
}
return result;
}
从函数运行所需时间入手,可借助clock函数,其在头文件<time.h>中
clock_t clock(void)
clock函数返回程序开始执行后占用的处理器时间。如果无法获取处理器时间,则返回值为-1。clock()/CLOCKS_PER_SEC是以秒为单位表示的时间。(The C Programming Language)
#include<stdio.h>
#include<time.h>
double MyFunction(double,double,int);
clock_t start , stop;//clock_t是clock()函数返回的变量类型
double duration; //记录被测函数运行时间,以秒为单位
int main()
{
//不再测试范围内的准备工作写在clock()调用之前
start = clock();
MyFunction();
stop = clock();
duration = ((double)(stop - start))/CLK_TCK;//计算运行时间
其他不在测试范围的处理写在后面,eg:输出duration的值
printf("%f",duration);
return 0;
}
/*当编译器无法捕捉到duration时,可能是运行时间太短,此时可以设置一个循环,最后将时间除以相应的轮数即可
*/
double f1(double a[],int n,double x)
{
double result;
result=a[0];
int i;
for(i=1;i<n;i++){
result+=a[i]*power(x,i);
}
return result;
}
double f2(double a[],int n,double x)
{
double result=a[n];
int i;
for(i=n;i>=1;i++){
result=a[i-1]+x*result;
}
return result;
}
解决问题的效率,与算法的巧妙程度有关