一个多项式的描述
程序员文章站
2022-06-17 08:18:46
问题部分 描述: 一元多项式的标准表达式可以写为 : $f(x) = a_{ 0 } + a_{ 1 }x + \dots + a_{n 1} x^{n 1} + a_{n} x^{n}$。现给定一个多项式的阶数$n$,并将全体系数$\{a_{i}\}_{i = 0}^{n}$存放在数组$a[]$里 ......
问题部分
- 描述:
一元多项式的标准表达式可以写为 : $f(x) = a_{ 0 } + a_{ 1 }x + \dots + a_{n - 1} x^{n - 1} + a_{n} x^{n}$。现给定一个多项式的阶数$n$,并将全体系数${a_{i}}_{i = 0}^{n}$存放在数组$a[]$里。请写程序计算这个多项式在给定点$x$处的值。
代码部分
#include <stdio.h> #include <time.h> #include <math.h> clock_t start, stop; // clock_t 是 clock() 函数返回的变量类型 double duration; // 记录被测函数运行时间,以秒为单位 #define maxn 10 // 多项式最大项数,即多项式阶数 +1 #define maxk 1e7 // 被测函数最大重复调用次数 double f1(int n,double a[],double x){ // 计算阶数为n,系数为a[0] ... a[n]的多项式在x点的值 int i; double p = a[0]; for(i = 1; i <= n; i++){ p += (a[i] * pow(x,i)); } return p; } double f2(int n, double a[],double x){ // 计算阶数为n,系数为a[0] ... a[n]的多项式在x点的值 int i; double p = a[n]; for (i = n; i > 0; i--){ p += a[i - 1] + x * p; } return p; } void run(double(*f)(int , double *, double), double a[], int case_n){ // 此函数用于测试被测试函数(*f)的运行时间,并且根据 case_n 输出相应的结果 // case_n 是输出的函数编号: 1 代表函数 f1; 2 代表函数 f2 // 不在测试范围内的准备工作写在 clock() 调用之前 int i; start = clock(); // 开始计时 for (i = 0; i < maxk; i++){ // 重复调用函数以获得充分多的时钟打点数 (*f)(maxn - 1, a, 1.1); } // 被测函数加在这里 stop = clock(); // 停止计时 duration = ((double)(stop - start)) / clocks_per_sec; // 计算运行时间 // 注意 clocks_per_sec (或 clk_tck)是机器时钟每秒所走的时钟打点数 // 其他不在测试范围的处理写在后面,例如输出 duration 的值 printf("tricks%d = %f \n", case_n,(double)(stop -start)); printf("duration%d = %6.2e \n", case_n,duration); } int main(){ int i; double a[maxn]; // 存储多项式的系数 // 为本题的多项式系数赋值,即 a[i] = i for(i = 0; i < maxn; i++){ a[i] = (double)i; } run(f1,a,1); run(f2,a,2); return 0; }
测试结果
tricks1 = 13334051.000000 duration1 = 1.33e+01 tricks2 = 1560921.000000 duration2 = 1.56e+00
上一篇: 爆笑之逗B剧场第170季