1 /**************************************************************************
3 * (C) Copyright VMware, Inc 2010.
4 * (C) Copyright John Maddock 2006.
5 * Use, modification and distribution are subject to the
6 * Boost Software License, Version 1.0. (See accompanying file
7 * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9 **************************************************************************/
13 * This file allows to compute the minimax polynomial coefficients we use
16 * How to use this source:
18 * - Download and build the NTL library from
19 * http://shoup.net/ntl/download.html , or install libntl-dev package if on
22 * - Download boost source code matching to your distro.
24 * - Goto libs/math/minimax and replace f.cpp with this file.
28 * g++ -o minimax -I /path/to/ntl/include main.cpp f.cpp /path/to/ntl/src/ntl.a
34 * - For example, to compute exp2 5th order polynomial between [0, 1] do:
42 * and take the coefficients from the P = { ... } array.
44 * - To compute log2 4th order polynomial between [0, 1/9] do:
53 * http://www.boost.org/doc/libs/1_47_0/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals2/minimax.html
57 #include <boost/math/bindings/rr.hpp>
58 #include <boost/math/tools/polynomial.hpp>
62 boost::math::ntl::RR
exp2(const boost::math::ntl::RR
& x
)
64 return exp(x
*log(2.0));
67 boost::math::ntl::RR
log2(const boost::math::ntl::RR
& x
)
69 return log(x
)/log(2.0);
72 boost::math::ntl::RR
f(const boost::math::ntl::RR
& x
, int variant
)
80 return log2((1.0 + sqrt(x
))/(1.0 - sqrt(x
)))/sqrt(x
);
88 const boost::math::tools::polynomial
<boost::math::ntl::RR
>& n
,
89 const boost::math::tools::polynomial
<boost::math::ntl::RR
>& d
,
90 const boost::math::ntl::RR
& x_offset
,
91 const boost::math::ntl::RR
& y_offset
,