多项式求和

来源:互联网 发布:油画 知乎 编辑:程序博客网 时间:2024/06/05 04:44

=ixi

#include <stdio.h>#include <time.h>#include <math.h>#define MAXN 10#define MAXK 1e7clock_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], sum1, sum2;    for(i=0; i<MAXN; i++)        a[i] = (double)i;    start = clock();    for(i=0; i<MAXK; i++)        sum1=f1(MAXN-1, a, 1.1);    stop = clock();    duration = ((double)(stop-start))/CLK_TCK/MAXK;    printf("sum1 = %f\n", sum1);    printf("ticks1 = %f\n",(double)(stop-start));    printf("duration = %6.2e\n\n\n", duration);    start = clock();    for(i=0; i<MAXK; i++)        sum2=f2(MAXN-1, a, 1.1);    stop = clock();    duration = ((double)(stop-start))/CLK_TCK/MAXK;    printf("sum2 = %f\n", sum2);    printf("ticks2 = %f\n",(double)(stop-start));    printf("duration = %6.2e\n", duration);    return 0;}double f1(int n, double a[], double x)//算法复杂度( 1+2+3...+n=(n^2+n)/2) 其实就是算乘法的次数,Tn=C1n^2+C2n   {    double sum=0;    int i;    for(i=0; i<=n; i++)    {        sum += (a[i]*pow(x,i));//这里+=后面加个大括号更保险    }    return sum;}double f2(int n, double a[], double x)//算法复杂度n Tn=C*n{    double sum=a[n];    int i;    for(i=n; i>0; i--)//注意这里是>0    {        sum = a[i-1] + sum*x;//这里也巧妙    }    return sum;}