From d312b224b6759fd9b206d4c19450f6a4dfe53311 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Tue, 3 Apr 2012 09:10:53 +0100 Subject: [PATCH] gallivm: Simplify/reorder minimax helper. --- src/gallium/auxiliary/gallivm/f.cpp | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/gallium/auxiliary/gallivm/f.cpp b/src/gallium/auxiliary/gallivm/f.cpp index 6b9c35b3ce5..7cb50f16c0f 100644 --- a/src/gallium/auxiliary/gallivm/f.cpp +++ b/src/gallium/auxiliary/gallivm/f.cpp @@ -31,20 +31,20 @@ * * ./minimax * - * - For example, to compute log2 5th order polynomial between [1, 2] do: + * - For example, to compute exp2 5th order polynomial between [0, 1] do: * * variant 0 - * range 1 2 + * range 0 1 * order 5 0 * step 200 * info * * and take the coefficients from the P = { ... } array. * - * - To compute exp2 5th order polynomial between [0, 1] do: + * - To compute log2 5th order polynomial between [1, 2] do: * * variant 1 - * range 0 1 + * range 1 2 * order 5 0 * step 200 * info @@ -59,20 +59,25 @@ #include +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) { - static const boost::math::ntl::RR tiny = boost::math::tools::min_value() * 64; - switch(variant) { case 0: - // log2(x)/(x - 1) - return log(x)/log(2.0)/(x - 1.0); + return exp2(x); case 1: - // exp2(x) - return exp(x*log(2.0)); + return log2(x)/(x - 1.0); } return 0; -- 2.30.2