]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/math/tools/rational_tests.cpp
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)
7 #include <boost/random.hpp>
8 #include <boost/math/tools/rational.hpp>
14 using namespace boost::math
;
15 using namespace boost::math::tools
;
17 std::cout
<< std::scientific
<< std::setprecision(40);
20 boost::variate_generator
<
22 boost::uniform_int
<> > gen(rnd
, boost::uniform_int
<>(1, 12));
24 for(unsigned i
= 1; i
< 12; ++i
)
26 std::vector
<int> coef
;
27 for(unsigned j
= 0; j
< i
; ++j
)
29 coef
.push_back(gen());
33 " // Polynomials of order " << i
-1 << "\n"
35 " static const U n" << i
<< "c[" << i
<< "] = { ";
36 for(unsigned j
= 0; j
< i
; ++j
)
44 " static const std::array<U, " << i
<< "> n" << i
<< "a = { ";
45 for(unsigned j
= 0; j
< i
; ++j
)
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
);
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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
);
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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
);
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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
);
266 for(unsigned j
= 0; j
< i
; ++j
)
268 coef
.push_back(gen());
272 " // Rational functions of order " << i
-1 << "\n"
274 " static const U d" << i
<< "c[" << i
<< "] = { ";
275 for(unsigned j
= 0; j
< i
; ++j
)
279 std::cout
<< coef
[j
];
281 std::cout
<< " };\n";
283 " static const std::array<U, " << i
<< "> d" << i
<< "a = { ";
284 for(unsigned j
= 0; j
< i
; ++j
)
288 std::cout
<< coef
[j
];
290 std::cout
<< " };\n";
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
);
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"