123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365 |
- // (C) Copyright John Maddock 2007.
- // Use, modification and distribution are subject to the
- // Boost Software License, Version 1.0. (See accompanying file
- // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- #include <boost/random.hpp>
- #include <boost/math/tools/rational.hpp>
- #include <iostream>
- #include <fstream>
- #include "mp_t.hpp"
- int main()
- {
- using namespace boost::math;
- using namespace boost::math::tools;
- std::cout << std::scientific << std::setprecision(40);
- boost::mt19937 rnd;
- boost::variate_generator<
- boost::mt19937,
- boost::uniform_int<> > gen(rnd, boost::uniform_int<>(1, 12));
- for(unsigned i = 1; i < 12; ++i)
- {
- std::vector<int> coef;
- for(unsigned j = 0; j < i; ++j)
- {
- coef.push_back(gen());
- }
- std::cout <<
- " //\n"
- " // Polynomials of order " << i-1 << "\n"
- " //\n"
- " static const U n" << i << "c[" << i << "] = { ";
- for(unsigned j = 0; j < i; ++j)
- {
- if(j)
- std::cout << ", ";
- std::cout << coef[j];
- }
- std::cout << " };\n";
- std::cout <<
- " static const boost::array<U, " << i << "> n" << i << "a = { ";
- for(unsigned j = 0; j < i; ++j)
- {
- if(j)
- std::cout << ", ";
- std::cout << coef[j];
- }
- std::cout << " };\n";
- mp_t r1 = boost::math::tools::evaluate_polynomial(&coef[0], mp_t(0.125), i);
- mp_t r2 = boost::math::tools::evaluate_polynomial(&coef[0], mp_t(0.25), i);
- mp_t r3 = boost::math::tools::evaluate_polynomial(&coef[0], mp_t(0.75), i);
- mp_t r4 = boost::math::tools::evaluate_polynomial(&coef[0], mp_t(1) - mp_t(1) / 64, i);
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_polynomial(n" << i << "c, static_cast<T>(0.125), " << i << "),\n"
- " static_cast<T>(" << r1 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_polynomial(n" << i << "c, static_cast<T>(0.25), " << i << "),\n"
- " static_cast<T>(" << r2 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_polynomial(n" << i << "c, static_cast<T>(0.75), " << i << "),\n"
- " static_cast<T>(" << r3 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_polynomial(n" << i << "c, static_cast<T>(1.0f - 1.0f/64.0f), " << i << "),\n"
- " static_cast<T>(" << r4 << "L),\n"
- " tolerance);\n\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_polynomial(n" << i << "c, static_cast<T>(0.125)),\n"
- " static_cast<T>(" << r1 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_polynomial(n" << i << "c, static_cast<T>(0.25)),\n"
- " static_cast<T>(" << r2 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_polynomial(n" << i << "c, static_cast<T>(0.75)),\n"
- " static_cast<T>(" << r3 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_polynomial(n" << i << "c, static_cast<T>(1.0f - 1.0f/64.0f)),\n"
- " static_cast<T>(" << r4 << "L),\n"
- " tolerance);\n\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_polynomial(n" << i << "a, static_cast<T>(0.125)),\n"
- " static_cast<T>(" << r1 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_polynomial(n" << i << "a, static_cast<T>(0.25)),\n"
- " static_cast<T>(" << r2 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_polynomial(n" << i << "a, static_cast<T>(0.75)),\n"
- " static_cast<T>(" << r3 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_polynomial(n" << i << "a, static_cast<T>(1.0f - 1.0f/64.0f)),\n"
- " static_cast<T>(" << r4 << "L),\n"
- " tolerance);\n\n";
- r1 = boost::math::tools::evaluate_even_polynomial(&coef[0], mp_t(0.125), i);
- r2 = boost::math::tools::evaluate_even_polynomial(&coef[0], mp_t(0.25), i);
- r3 = boost::math::tools::evaluate_even_polynomial(&coef[0], mp_t(0.75), i);
- r4 = boost::math::tools::evaluate_even_polynomial(&coef[0], mp_t(1) - mp_t(1) / 64, i);
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_even_polynomial(n" << i << "c, static_cast<T>(0.125), " << i << "),\n"
- " static_cast<T>(" << r1 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_even_polynomial(n" << i << "c, static_cast<T>(0.25), " << i << "),\n"
- " static_cast<T>(" << r2 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_even_polynomial(n" << i << "c, static_cast<T>(0.75), " << i << "),\n"
- " static_cast<T>(" << r3 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_even_polynomial(n" << i << "c, static_cast<T>(1.0f - 1.0f/64.0f), " << i << "),\n"
- " static_cast<T>(" << r4 << "L),\n"
- " tolerance);\n\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_even_polynomial(n" << i << "c, static_cast<T>(0.125)),\n"
- " static_cast<T>(" << r1 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_even_polynomial(n" << i << "c, static_cast<T>(0.25)),\n"
- " static_cast<T>(" << r2 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_even_polynomial(n" << i << "c, static_cast<T>(0.75)),\n"
- " static_cast<T>(" << r3 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_even_polynomial(n" << i << "c, static_cast<T>(1.0f - 1.0f/64.0f)),\n"
- " static_cast<T>(" << r4 << "L),\n"
- " tolerance);\n\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_even_polynomial(n" << i << "a, static_cast<T>(0.125)),\n"
- " static_cast<T>(" << r1 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_even_polynomial(n" << i << "a, static_cast<T>(0.25)),\n"
- " static_cast<T>(" << r2 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_even_polynomial(n" << i << "a, static_cast<T>(0.75)),\n"
- " static_cast<T>(" << r3 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_even_polynomial(n" << i << "a, static_cast<T>(1.0f - 1.0f/64.0f)),\n"
- " static_cast<T>(" << r4 << "L),\n"
- " tolerance);\n\n";
- if(i > 1)
- {
- r1 = boost::math::tools::evaluate_odd_polynomial(&coef[0], mp_t(0.125), i);
- r2 = boost::math::tools::evaluate_odd_polynomial(&coef[0], mp_t(0.25), i);
- r3 = boost::math::tools::evaluate_odd_polynomial(&coef[0], mp_t(0.75), i);
- r4 = boost::math::tools::evaluate_odd_polynomial(&coef[0], mp_t(1) - mp_t(1) / 64, i);
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_odd_polynomial(n" << i << "c, static_cast<T>(0.125), " << i << "),\n"
- " static_cast<T>(" << r1 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_odd_polynomial(n" << i << "c, static_cast<T>(0.25), " << i << "),\n"
- " static_cast<T>(" << r2 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_odd_polynomial(n" << i << "c, static_cast<T>(0.75), " << i << "),\n"
- " static_cast<T>(" << r3 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_odd_polynomial(n" << i << "c, static_cast<T>(1.0f - 1.0f/64.0f), " << i << "),\n"
- " static_cast<T>(" << r4 << "L),\n"
- " tolerance);\n\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_odd_polynomial(n" << i << "c, static_cast<T>(0.125)),\n"
- " static_cast<T>(" << r1 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_odd_polynomial(n" << i << "c, static_cast<T>(0.25)),\n"
- " static_cast<T>(" << r2 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_odd_polynomial(n" << i << "c, static_cast<T>(0.75)),\n"
- " static_cast<T>(" << r3 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_odd_polynomial(n" << i << "c, static_cast<T>(1.0f - 1.0f/64.0f)),\n"
- " static_cast<T>(" << r4 << "L),\n"
- " tolerance);\n\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_odd_polynomial(n" << i << "a, static_cast<T>(0.125)),\n"
- " static_cast<T>(" << r1 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_odd_polynomial(n" << i << "a, static_cast<T>(0.25)),\n"
- " static_cast<T>(" << r2 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_odd_polynomial(n" << i << "a, static_cast<T>(0.75)),\n"
- " static_cast<T>(" << r3 << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_odd_polynomial(n" << i << "a, static_cast<T>(1.0f - 1.0f/64.0f)),\n"
- " static_cast<T>(" << r4 << "L),\n"
- " tolerance);\n\n";
- }
- r1 = boost::math::tools::evaluate_polynomial(&coef[0], mp_t(0.125), i);
- r2 = boost::math::tools::evaluate_polynomial(&coef[0], mp_t(0.25), i);
- r3 = boost::math::tools::evaluate_polynomial(&coef[0], mp_t(0.75), i);
- r4 = boost::math::tools::evaluate_polynomial(&coef[0], mp_t(1) - mp_t(1) / 64, i);
- coef.clear();
- for(unsigned j = 0; j < i; ++j)
- {
- coef.push_back(gen());
- }
- std::cout <<
- " //\n"
- " // Rational functions of order " << i-1 << "\n"
- " //\n"
- " static const U d" << i << "c[" << i << "] = { ";
- for(unsigned j = 0; j < i; ++j)
- {
- if(j)
- std::cout << ", ";
- std::cout << coef[j];
- }
- std::cout << " };\n";
- std::cout <<
- " static const boost::array<U, " << i << "> d" << i << "a = { ";
- for(unsigned j = 0; j < i; ++j)
- {
- if(j)
- std::cout << ", ";
- std::cout << coef[j];
- }
- std::cout << " };\n";
- mp_t r1d = boost::math::tools::evaluate_polynomial(&coef[0], mp_t(0.125), i);
- mp_t r2d = boost::math::tools::evaluate_polynomial(&coef[0], mp_t(0.25), i);
- mp_t r3d = boost::math::tools::evaluate_polynomial(&coef[0], mp_t(0.75), i);
- mp_t r4d = boost::math::tools::evaluate_polynomial(&coef[0], mp_t(1) - mp_t(1) / 64, i);
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_rational(n" << i << "c, d" << i << "c, static_cast<T>(0.125), " << i << "),\n"
- " static_cast<T>(" << r1/r1d << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_rational(n" << i << "c, d" << i << "c, static_cast<T>(0.25), " << i << "),\n"
- " static_cast<T>(" << r2/r2d << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_rational(n" << i << "c, d" << i << "c, static_cast<T>(0.75), " << i << "),\n"
- " static_cast<T>(" << r3/r3d << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_rational(n" << i << "c, d" << i << "c, static_cast<T>(1.0f - 1.0f/64.0f), " << i << "),\n"
- " static_cast<T>(" << r4/r4d << "L),\n"
- " tolerance);\n\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_rational(n" << i << "c, d" << i << "c, static_cast<T>(0.125)),\n"
- " static_cast<T>(" << r1/r1d << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_rational(n" << i << "c, d" << i << "c, static_cast<T>(0.25)),\n"
- " static_cast<T>(" << r2/r2d << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_rational(n" << i << "c, d" << i << "c, static_cast<T>(0.75)),\n"
- " static_cast<T>(" << r3/r3d << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_rational(n" << i << "c, d" << i << "c, static_cast<T>(1.0f - 1.0f/64.0f)),\n"
- " static_cast<T>(" << r4/r4d << "L),\n"
- " tolerance);\n\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_rational(n" << i << "a, d" << i << "a, static_cast<T>(0.125)),\n"
- " static_cast<T>(" << r1/r1d << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_rational(n" << i << "a, d" << i << "a, static_cast<T>(0.25)),\n"
- " static_cast<T>(" << r2/r2d << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_rational(n" << i << "a, d" << i << "a, static_cast<T>(0.75)),\n"
- " static_cast<T>(" << r3/r3d << "L),\n"
- " tolerance);\n";
- std::cout <<
- " BOOST_CHECK_CLOSE(\n"
- " boost::math::tools::evaluate_rational(n" << i << "a, d" << i << "a, static_cast<T>(1.0f - 1.0f/64.0f)),\n"
- " static_cast<T>(" << r4/r4d << "L),\n"
- " tolerance);\n\n";
- }
- return 0;
- }
|