• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //  (C) Copyright John Maddock 2007.
2 //  Use, modification and distribution are subject to the
3 //  Boost Software License, Version 1.0. (See accompanying file
4 //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5 
6 #include <boost/random.hpp>
7 #include <boost/math/tools/rational.hpp>
8 #include <iostream>
9 #include <fstream>
10 #include "mp_t.hpp"
11 
main()12 int main()
13 {
14    using namespace boost::math;
15    using namespace boost::math::tools;
16 
17    std::cout << std::scientific << std::setprecision(40);
18 
19    boost::mt19937 rnd;
20    boost::variate_generator<
21       boost::mt19937,
22       boost::uniform_int<> > gen(rnd, boost::uniform_int<>(1, 12));
23 
24    for(unsigned i = 1; i < 12; ++i)
25    {
26       std::vector<int> coef;
27       for(unsigned j = 0; j < i; ++j)
28       {
29          coef.push_back(gen());
30       }
31       std::cout <<
32 "   //\n"
33 "   // Polynomials of order " << i-1 << "\n"
34 "   //\n"
35 "   static const U n" << i << "c[" << i << "] = { ";
36       for(unsigned j = 0; j < i; ++j)
37       {
38          if(j)
39             std::cout  << ", ";
40          std::cout << coef[j];
41       }
42       std::cout << " };\n";
43       std::cout <<
44          "   static const boost::array<U, " << i << "> n" << i << "a = { ";
45       for(unsigned j = 0; j < i; ++j)
46       {
47          if(j)
48             std::cout  << ", ";
49          std::cout << coef[j];
50       }
51       std::cout << " };\n";
52 
53       mp_t r1 = boost::math::tools::evaluate_polynomial(&coef[0], mp_t(0.125), i);
54       mp_t r2 = boost::math::tools::evaluate_polynomial(&coef[0], mp_t(0.25), i);
55       mp_t r3 = boost::math::tools::evaluate_polynomial(&coef[0], mp_t(0.75), i);
56       mp_t r4 = boost::math::tools::evaluate_polynomial(&coef[0], mp_t(1) - mp_t(1) / 64, i);
57 
58       std::cout <<
59          "   BOOST_CHECK_CLOSE(\n"
60          "      boost::math::tools::evaluate_polynomial(n" << i << "c, static_cast<T>(0.125), " << i << "),\n"
61          "      static_cast<T>(" << r1 << "L),\n"
62          "      tolerance);\n";
63       std::cout <<
64          "   BOOST_CHECK_CLOSE(\n"
65          "      boost::math::tools::evaluate_polynomial(n" << i << "c, static_cast<T>(0.25), " << i << "),\n"
66          "      static_cast<T>(" << r2 << "L),\n"
67          "      tolerance);\n";
68       std::cout <<
69          "   BOOST_CHECK_CLOSE(\n"
70          "      boost::math::tools::evaluate_polynomial(n" << i << "c, static_cast<T>(0.75), " << i << "),\n"
71          "      static_cast<T>(" << r3 << "L),\n"
72          "      tolerance);\n";
73       std::cout <<
74          "   BOOST_CHECK_CLOSE(\n"
75          "      boost::math::tools::evaluate_polynomial(n" << i << "c, static_cast<T>(1.0f - 1.0f/64.0f), " << i << "),\n"
76          "      static_cast<T>(" << r4 << "L),\n"
77          "      tolerance);\n\n";
78 
79       std::cout <<
80          "   BOOST_CHECK_CLOSE(\n"
81          "      boost::math::tools::evaluate_polynomial(n" << i << "c, static_cast<T>(0.125)),\n"
82          "      static_cast<T>(" << r1 << "L),\n"
83          "      tolerance);\n";
84       std::cout <<
85          "   BOOST_CHECK_CLOSE(\n"
86          "      boost::math::tools::evaluate_polynomial(n" << i << "c, static_cast<T>(0.25)),\n"
87          "      static_cast<T>(" << r2 << "L),\n"
88          "      tolerance);\n";
89       std::cout <<
90          "   BOOST_CHECK_CLOSE(\n"
91          "      boost::math::tools::evaluate_polynomial(n" << i << "c, static_cast<T>(0.75)),\n"
92          "      static_cast<T>(" << r3 << "L),\n"
93          "      tolerance);\n";
94       std::cout <<
95          "   BOOST_CHECK_CLOSE(\n"
96          "      boost::math::tools::evaluate_polynomial(n" << i << "c, static_cast<T>(1.0f - 1.0f/64.0f)),\n"
97          "      static_cast<T>(" << r4 << "L),\n"
98          "      tolerance);\n\n";
99 
100       std::cout <<
101          "   BOOST_CHECK_CLOSE(\n"
102          "      boost::math::tools::evaluate_polynomial(n" << i << "a, static_cast<T>(0.125)),\n"
103          "      static_cast<T>(" << r1 << "L),\n"
104          "      tolerance);\n";
105       std::cout <<
106          "   BOOST_CHECK_CLOSE(\n"
107          "      boost::math::tools::evaluate_polynomial(n" << i << "a, static_cast<T>(0.25)),\n"
108          "      static_cast<T>(" << r2 << "L),\n"
109          "      tolerance);\n";
110       std::cout <<
111          "   BOOST_CHECK_CLOSE(\n"
112          "      boost::math::tools::evaluate_polynomial(n" << i << "a, static_cast<T>(0.75)),\n"
113          "      static_cast<T>(" << r3 << "L),\n"
114          "      tolerance);\n";
115       std::cout <<
116          "   BOOST_CHECK_CLOSE(\n"
117          "      boost::math::tools::evaluate_polynomial(n" << i << "a, static_cast<T>(1.0f - 1.0f/64.0f)),\n"
118          "      static_cast<T>(" << r4 << "L),\n"
119          "      tolerance);\n\n";
120 
121       r1 = boost::math::tools::evaluate_even_polynomial(&coef[0], mp_t(0.125), i);
122       r2 = boost::math::tools::evaluate_even_polynomial(&coef[0], mp_t(0.25), i);
123       r3 = boost::math::tools::evaluate_even_polynomial(&coef[0], mp_t(0.75), i);
124       r4 = boost::math::tools::evaluate_even_polynomial(&coef[0], mp_t(1) - mp_t(1) / 64, i);
125 
126       std::cout <<
127          "   BOOST_CHECK_CLOSE(\n"
128          "      boost::math::tools::evaluate_even_polynomial(n" << i << "c, static_cast<T>(0.125), " << i << "),\n"
129          "      static_cast<T>(" << r1 << "L),\n"
130          "      tolerance);\n";
131       std::cout <<
132          "   BOOST_CHECK_CLOSE(\n"
133          "      boost::math::tools::evaluate_even_polynomial(n" << i << "c, static_cast<T>(0.25), " << i << "),\n"
134          "      static_cast<T>(" << r2 << "L),\n"
135          "      tolerance);\n";
136       std::cout <<
137          "   BOOST_CHECK_CLOSE(\n"
138          "      boost::math::tools::evaluate_even_polynomial(n" << i << "c, static_cast<T>(0.75), " << i << "),\n"
139          "      static_cast<T>(" << r3 << "L),\n"
140          "      tolerance);\n";
141       std::cout <<
142          "   BOOST_CHECK_CLOSE(\n"
143          "      boost::math::tools::evaluate_even_polynomial(n" << i << "c, static_cast<T>(1.0f - 1.0f/64.0f), " << i << "),\n"
144          "      static_cast<T>(" << r4 << "L),\n"
145          "      tolerance);\n\n";
146 
147       std::cout <<
148          "   BOOST_CHECK_CLOSE(\n"
149          "      boost::math::tools::evaluate_even_polynomial(n" << i << "c, static_cast<T>(0.125)),\n"
150          "      static_cast<T>(" << r1 << "L),\n"
151          "      tolerance);\n";
152       std::cout <<
153          "   BOOST_CHECK_CLOSE(\n"
154          "      boost::math::tools::evaluate_even_polynomial(n" << i << "c, static_cast<T>(0.25)),\n"
155          "      static_cast<T>(" << r2 << "L),\n"
156          "      tolerance);\n";
157       std::cout <<
158          "   BOOST_CHECK_CLOSE(\n"
159          "      boost::math::tools::evaluate_even_polynomial(n" << i << "c, static_cast<T>(0.75)),\n"
160          "      static_cast<T>(" << r3 << "L),\n"
161          "      tolerance);\n";
162       std::cout <<
163          "   BOOST_CHECK_CLOSE(\n"
164          "      boost::math::tools::evaluate_even_polynomial(n" << i << "c, static_cast<T>(1.0f - 1.0f/64.0f)),\n"
165          "      static_cast<T>(" << r4 << "L),\n"
166          "      tolerance);\n\n";
167 
168       std::cout <<
169          "   BOOST_CHECK_CLOSE(\n"
170          "      boost::math::tools::evaluate_even_polynomial(n" << i << "a, static_cast<T>(0.125)),\n"
171          "      static_cast<T>(" << r1 << "L),\n"
172          "      tolerance);\n";
173       std::cout <<
174          "   BOOST_CHECK_CLOSE(\n"
175          "      boost::math::tools::evaluate_even_polynomial(n" << i << "a, static_cast<T>(0.25)),\n"
176          "      static_cast<T>(" << r2 << "L),\n"
177          "      tolerance);\n";
178       std::cout <<
179          "   BOOST_CHECK_CLOSE(\n"
180          "      boost::math::tools::evaluate_even_polynomial(n" << i << "a, static_cast<T>(0.75)),\n"
181          "      static_cast<T>(" << r3 << "L),\n"
182          "      tolerance);\n";
183       std::cout <<
184          "   BOOST_CHECK_CLOSE(\n"
185          "      boost::math::tools::evaluate_even_polynomial(n" << i << "a, static_cast<T>(1.0f - 1.0f/64.0f)),\n"
186          "      static_cast<T>(" << r4 << "L),\n"
187          "      tolerance);\n\n";
188 
189       if(i > 1)
190       {
191          r1 = boost::math::tools::evaluate_odd_polynomial(&coef[0], mp_t(0.125), i);
192          r2 = boost::math::tools::evaluate_odd_polynomial(&coef[0], mp_t(0.25), i);
193          r3 = boost::math::tools::evaluate_odd_polynomial(&coef[0], mp_t(0.75), i);
194          r4 = boost::math::tools::evaluate_odd_polynomial(&coef[0], mp_t(1) - mp_t(1) / 64, i);
195 
196          std::cout <<
197             "   BOOST_CHECK_CLOSE(\n"
198             "      boost::math::tools::evaluate_odd_polynomial(n" << i << "c, static_cast<T>(0.125), " << i << "),\n"
199             "      static_cast<T>(" << r1 << "L),\n"
200             "      tolerance);\n";
201          std::cout <<
202             "   BOOST_CHECK_CLOSE(\n"
203             "      boost::math::tools::evaluate_odd_polynomial(n" << i << "c, static_cast<T>(0.25), " << i << "),\n"
204             "      static_cast<T>(" << r2 << "L),\n"
205             "      tolerance);\n";
206          std::cout <<
207             "   BOOST_CHECK_CLOSE(\n"
208             "      boost::math::tools::evaluate_odd_polynomial(n" << i << "c, static_cast<T>(0.75), " << i << "),\n"
209             "      static_cast<T>(" << r3 << "L),\n"
210             "      tolerance);\n";
211          std::cout <<
212             "   BOOST_CHECK_CLOSE(\n"
213             "      boost::math::tools::evaluate_odd_polynomial(n" << i << "c, static_cast<T>(1.0f - 1.0f/64.0f), " << i << "),\n"
214             "      static_cast<T>(" << r4 << "L),\n"
215             "      tolerance);\n\n";
216 
217          std::cout <<
218             "   BOOST_CHECK_CLOSE(\n"
219             "      boost::math::tools::evaluate_odd_polynomial(n" << i << "c, static_cast<T>(0.125)),\n"
220             "      static_cast<T>(" << r1 << "L),\n"
221             "      tolerance);\n";
222          std::cout <<
223             "   BOOST_CHECK_CLOSE(\n"
224             "      boost::math::tools::evaluate_odd_polynomial(n" << i << "c, static_cast<T>(0.25)),\n"
225             "      static_cast<T>(" << r2 << "L),\n"
226             "      tolerance);\n";
227          std::cout <<
228             "   BOOST_CHECK_CLOSE(\n"
229             "      boost::math::tools::evaluate_odd_polynomial(n" << i << "c, static_cast<T>(0.75)),\n"
230             "      static_cast<T>(" << r3 << "L),\n"
231             "      tolerance);\n";
232          std::cout <<
233             "   BOOST_CHECK_CLOSE(\n"
234             "      boost::math::tools::evaluate_odd_polynomial(n" << i << "c, static_cast<T>(1.0f - 1.0f/64.0f)),\n"
235             "      static_cast<T>(" << r4 << "L),\n"
236             "      tolerance);\n\n";
237 
238          std::cout <<
239             "   BOOST_CHECK_CLOSE(\n"
240             "      boost::math::tools::evaluate_odd_polynomial(n" << i << "a, static_cast<T>(0.125)),\n"
241             "      static_cast<T>(" << r1 << "L),\n"
242             "      tolerance);\n";
243          std::cout <<
244             "   BOOST_CHECK_CLOSE(\n"
245             "      boost::math::tools::evaluate_odd_polynomial(n" << i << "a, static_cast<T>(0.25)),\n"
246             "      static_cast<T>(" << r2 << "L),\n"
247             "      tolerance);\n";
248          std::cout <<
249             "   BOOST_CHECK_CLOSE(\n"
250             "      boost::math::tools::evaluate_odd_polynomial(n" << i << "a, static_cast<T>(0.75)),\n"
251             "      static_cast<T>(" << r3 << "L),\n"
252             "      tolerance);\n";
253          std::cout <<
254             "   BOOST_CHECK_CLOSE(\n"
255             "      boost::math::tools::evaluate_odd_polynomial(n" << i << "a, static_cast<T>(1.0f - 1.0f/64.0f)),\n"
256             "      static_cast<T>(" << r4 << "L),\n"
257             "      tolerance);\n\n";
258       }
259 
260       r1 = boost::math::tools::evaluate_polynomial(&coef[0], mp_t(0.125), i);
261       r2 = boost::math::tools::evaluate_polynomial(&coef[0], mp_t(0.25), i);
262       r3 = boost::math::tools::evaluate_polynomial(&coef[0], mp_t(0.75), i);
263       r4 = boost::math::tools::evaluate_polynomial(&coef[0], mp_t(1) - mp_t(1) / 64, i);
264 
265       coef.clear();
266       for(unsigned j = 0; j < i; ++j)
267       {
268          coef.push_back(gen());
269       }
270       std::cout <<
271 "   //\n"
272 "   // Rational functions of order " << i-1 << "\n"
273 "   //\n"
274 "   static const U d" << i << "c[" << i << "] = { ";
275       for(unsigned j = 0; j < i; ++j)
276       {
277          if(j)
278             std::cout  << ", ";
279          std::cout << coef[j];
280       }
281       std::cout << " };\n";
282       std::cout <<
283          "   static const boost::array<U, " << i << "> d" << i << "a = { ";
284       for(unsigned j = 0; j < i; ++j)
285       {
286          if(j)
287             std::cout  << ", ";
288          std::cout << coef[j];
289       }
290       std::cout << " };\n";
291 
292       mp_t r1d = boost::math::tools::evaluate_polynomial(&coef[0], mp_t(0.125), i);
293       mp_t r2d = boost::math::tools::evaluate_polynomial(&coef[0], mp_t(0.25), i);
294       mp_t r3d = boost::math::tools::evaluate_polynomial(&coef[0], mp_t(0.75), i);
295       mp_t r4d = boost::math::tools::evaluate_polynomial(&coef[0], mp_t(1) - mp_t(1) / 64, i);
296 
297       std::cout <<
298          "   BOOST_CHECK_CLOSE(\n"
299          "      boost::math::tools::evaluate_rational(n" << i << "c, d" << i << "c, static_cast<T>(0.125), " << i << "),\n"
300          "      static_cast<T>(" << r1/r1d << "L),\n"
301          "      tolerance);\n";
302       std::cout <<
303          "   BOOST_CHECK_CLOSE(\n"
304          "      boost::math::tools::evaluate_rational(n" << i << "c, d" << i << "c, static_cast<T>(0.25), " << i << "),\n"
305          "      static_cast<T>(" << r2/r2d << "L),\n"
306          "      tolerance);\n";
307       std::cout <<
308          "   BOOST_CHECK_CLOSE(\n"
309          "      boost::math::tools::evaluate_rational(n" << i << "c, d" << i << "c, static_cast<T>(0.75), " << i << "),\n"
310          "      static_cast<T>(" << r3/r3d << "L),\n"
311          "      tolerance);\n";
312       std::cout <<
313          "   BOOST_CHECK_CLOSE(\n"
314          "      boost::math::tools::evaluate_rational(n" << i << "c, d" << i << "c, static_cast<T>(1.0f - 1.0f/64.0f), " << i << "),\n"
315          "      static_cast<T>(" << r4/r4d << "L),\n"
316          "      tolerance);\n\n";
317 
318       std::cout <<
319          "   BOOST_CHECK_CLOSE(\n"
320          "      boost::math::tools::evaluate_rational(n" << i << "c, d" << i << "c, static_cast<T>(0.125)),\n"
321          "      static_cast<T>(" << r1/r1d << "L),\n"
322          "      tolerance);\n";
323       std::cout <<
324          "   BOOST_CHECK_CLOSE(\n"
325          "      boost::math::tools::evaluate_rational(n" << i << "c, d" << i << "c, static_cast<T>(0.25)),\n"
326          "      static_cast<T>(" << r2/r2d << "L),\n"
327          "      tolerance);\n";
328       std::cout <<
329          "   BOOST_CHECK_CLOSE(\n"
330          "      boost::math::tools::evaluate_rational(n" << i << "c, d" << i << "c, static_cast<T>(0.75)),\n"
331          "      static_cast<T>(" << r3/r3d << "L),\n"
332          "      tolerance);\n";
333       std::cout <<
334          "   BOOST_CHECK_CLOSE(\n"
335          "      boost::math::tools::evaluate_rational(n" << i << "c, d" << i << "c, static_cast<T>(1.0f - 1.0f/64.0f)),\n"
336          "      static_cast<T>(" << r4/r4d << "L),\n"
337          "      tolerance);\n\n";
338 
339       std::cout <<
340          "   BOOST_CHECK_CLOSE(\n"
341          "      boost::math::tools::evaluate_rational(n" << i << "a, d" << i << "a, static_cast<T>(0.125)),\n"
342          "      static_cast<T>(" << r1/r1d << "L),\n"
343          "      tolerance);\n";
344       std::cout <<
345          "   BOOST_CHECK_CLOSE(\n"
346          "      boost::math::tools::evaluate_rational(n" << i << "a, d" << i << "a, static_cast<T>(0.25)),\n"
347          "      static_cast<T>(" << r2/r2d << "L),\n"
348          "      tolerance);\n";
349       std::cout <<
350          "   BOOST_CHECK_CLOSE(\n"
351          "      boost::math::tools::evaluate_rational(n" << i << "a, d" << i << "a, static_cast<T>(0.75)),\n"
352          "      static_cast<T>(" << r3/r3d << "L),\n"
353          "      tolerance);\n";
354       std::cout <<
355          "   BOOST_CHECK_CLOSE(\n"
356          "      boost::math::tools::evaluate_rational(n" << i << "a, d" << i << "a, static_cast<T>(1.0f - 1.0f/64.0f)),\n"
357          "      static_cast<T>(" << r4/r4d << "L),\n"
358          "      tolerance);\n\n";
359    }
360 
361    return 0;
362 }
363 
364 
365 
366