关于多项式方程的写法

#include <stdio.h>
#include <time.h>
#include <math.h>
clock_t  start, stop;
double duration;
#define MAXN 10
#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);
    p = p + 1;
    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;
    p = p + 1;
    return p;
}
int main()
{
    int i;
    double a[MAXN];
    for (i = 0; i < MAXN; i++)
        a[i] = (double)1 / i;
    start = clock();
    for (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 (i = 0; i < MAXK; i++)
        f2(MAXN - 1, a, 1.1);
    stop = clock();
    duration = ((double)(stop - start)) / CLK_TCK / MAXK;
    printf("ticks2 = %f\n", (double)(stop - start));
    printf("duration2 = %6.2e\n", duration);
    return 0;
}

结果为:

因为乘除法的执行时间相比加减法更费时间。

猜你喜欢

转载自blog.csdn.net/u013553694/article/details/88116813