问题
如何编程求这个多项式?
code
很简单,我+再+再+不就出来了。
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
#include <time.h>
#define MAXK 10000000 //被测函数最大调用次数
#define MAXN 101 //多项式的最大项数,即阶数 + 1
clock_t start, stop; // clock_t是clock()函数返回的变量类型
double duration; //记录被测函数运行事件,以秒为单位
double f1(int n, double a[], double x)
{
double p = a[0];
for (int i = 1; i <= n; i++)
{
p += a[i] * pow(x, i);
}
return p;
}
double f2(int n, double a[], double x)
{
double p = a[n];
for (int i = n - 1; i >= 0; i--)
{
p = a[i] + p * x;
}
return p;
}
void printTime(int n, double a[], double x, bool flag)
{
start = clock();
for (int i = 0; i < MAXK; i++)
{
if (flag)
{
f1(n, a, x);
}
else
{
f2(n, a, x);
}
}
stop = clock();
duration = ((double)(stop - start)) / CLK_TCK / MAXK; /* 计算单词执行用时 */
printf("ticks = %lf\n", (double)(stop - start));
printf("duration = %6.2e\n", duration);
}
int main()
{
double a[MAXN];
for (int i = 0; i < MAXN; i++)
{
if (i == 0)
{
a[i] = 1.0;
}
else
{
a[i] = (double)(1 / i);
}
}
printf("f1:\n");
printTime(MAXN - 1, a, 1.1, true);
printf("f2:\n");
printTime(MAXN - 1, a, 1.1, false);
}
结果
看下运行时间
差这么多?是不是惊呆了。
再来一个多项式
code
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
#include <time.h>
#define MAXK 10000000 //被测函数最大调用次数
#define MAXN 101 //多项式的最大项数,即阶数 + 1
clock_t start, stop; // clock_t是clock()函数返回的变量类型
double duration; //记录被测函数运行事件,以秒为单位
double f1(int n, double x)
{
double p = (double)1;
for (int i = 1; i <= n; i++)
{
p += pow(x, i) / i;
}
return p;
}
double f2(int n, double x)
{
double p = (double)(1 / n);
for (int i = n; i > 1; i--)
{
p += (1 / (i - 1)) + (x * p);
}
return p;
}
void printTime(int n, double x, bool flag)
{
start = clock();
for (int i = 0; i < MAXK; i++)
{
if (flag)
{
f1(n, x);
}
else
{
f2(n, x);
}
}
stop = clock();
duration = ((double)(stop - start)) / CLK_TCK / MAXK; /* 计算单词执行用时 */
printf("ticks = %lf\n", (double)(stop - start));
printf("duration = %6.2e\n", duration);
}
int main()
{
printf("f1:\n");
printTime(MAXN - 1, 1.1, true);
printf("f2:\n");
printTime(MAXN - 1, 1.1, false);
}
结果
差这么多就离谱