求多项式的值,乘方函数

it2022-05-05  107

1 #include <iostream> 2 #include <time.h> 3 #include <random> 4 #include <iomanip> 5 using namespace std; 6 7 //求指数函数 8 inline double myPow(double x, int y) 9 {10 unsigned int n;11 12 //指数可能为负13 if (y >= 0)14 {15 n = y;16 } 17 else18 {19 n = -y;20 }21 22 //每次右移,相应x*=x,若当前最低位为1,则result *= x23 for (double result = 1; ; x *= x)24 {25 if ((n & 1) != 0)26 {27 result *= x;28 }29 if ((n >>= 1) == 0)30 {31 return (y >= 0)?result:1/result;//指数为负,取倒数32 }33 }34 }35 double polynomial(double a[], double x, int n)36 {37 double re = 0;38 for (int i = 0; i < n; i++)39 {40 re += a[i] * myPow(x, i);41 }42 return re;43 }44 double polynomial_horner(double a[], double x, int n)45 {46 double re = 0;47 for (int i = n - 1; i > 0; i--)48 {49 re = (a[i] + re) * x;50 }51 re += a[0];52 return re;53 }54 int main()55 {56 mt19937 eng;57 eng.seed((unsigned)time(NULL));58 uniform_real<double> unif;59 const size_t size = 10000;60 double *a = new double[size];61 for (int i = 0; i < size; i++)62 {63 a[i] = unif(eng);64 }65 66 clock_t start = clock();67 cout << polynomial(a, 0.9, size) << endl;68 clock_t end = clock();69 double d = double(end - start)/CLOCKS_PER_SEC;70 cout << setprecision(4) << fixed << d << endl;71 72 start = clock();73 cout.unsetf(ostream::floatfield);74 cout << polynomial_horner(a, 0.9, size) << endl;75 end = clock();76 d = double(end - start)/CLOCKS_PER_SEC;77 cout << setprecision(4) << fixed << d;78 }

转载于:https://www.cnblogs.com/yysblog/archive/2011/11/25/2263491.html


最新回复(0)