0,0 → 1,101 |
/************************************************************************** |
* |
* (C) Copyright VMware, Inc 2010. |
* (C) Copyright John Maddock 2006. |
* 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) |
* |
**************************************************************************/ |
|
|
/* |
* This file allows to compute the minimax polynomial coefficients we use |
* for fast exp2/log2. |
* |
* How to use this source: |
* |
* - Download and build the NTL library from |
* http://shoup.net/ntl/download.html , or install libntl-dev package if on |
* Debian. |
* |
* - Download boost source code matching to your distro. |
* |
* - Goto libs/math/minimax and replace f.cpp with this file. |
* |
* - Build as |
* |
* g++ -o minimax -I /path/to/ntl/include main.cpp f.cpp /path/to/ntl/src/ntl.a |
* |
* - Run as |
* |
* ./minimax |
* |
* - For example, to compute exp2 5th order polynomial between [0, 1] do: |
* |
* variant 0 |
* range 0 1 |
* order 5 0 |
* step 200 |
* info |
* |
* and take the coefficients from the P = { ... } array. |
* |
* - To compute log2 4th order polynomial between [0, 1/9] do: |
* |
* variant 1 |
* range 0 0.111111112 |
* order 4 0 |
* step 200 |
* info |
* |
* - For more info see |
* http://www.boost.org/doc/libs/1_47_0/libs/math/doc/sf_and_dist/html/math_toolkit/toolkit/internals2/minimax.html |
*/ |
|
#define L22 |
#include <boost/math/bindings/rr.hpp> |
#include <boost/math/tools/polynomial.hpp> |
|
#include <cmath> |
|
boost::math::ntl::RR exp2(const boost::math::ntl::RR& x) |
{ |
return exp(x*log(2.0)); |
} |
|
boost::math::ntl::RR log2(const boost::math::ntl::RR& x) |
{ |
return log(x)/log(2.0); |
} |
|
boost::math::ntl::RR f(const boost::math::ntl::RR& x, int variant) |
{ |
switch(variant) |
{ |
case 0: |
return exp2(x); |
|
case 1: |
return log2((1.0 + sqrt(x))/(1.0 - sqrt(x)))/sqrt(x); |
} |
|
return 0; |
} |
|
|
void show_extra( |
const boost::math::tools::polynomial<boost::math::ntl::RR>& n, |
const boost::math::tools::polynomial<boost::math::ntl::RR>& d, |
const boost::math::ntl::RR& x_offset, |
const boost::math::ntl::RR& y_offset, |
int variant) |
{ |
switch(variant) |
{ |
default: |
// do nothing here... |
; |
} |
} |
|