gallivm: Simplify/reorder minimax helper.
authorJosé Fonseca <jfonseca@vmware.com>
Tue, 3 Apr 2012 08:10:53 +0000 (09:10 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Tue, 3 Apr 2012 08:12:47 +0000 (09:12 +0100)
src/gallium/auxiliary/gallivm/f.cpp

index 6b9c35b3ce5fd65ddcd402026944b3b4283442cb..7cb50f16c0f3c9126c10f34e24741f4121b44636 100644 (file)
  *
  *    ./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
 
 #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)
 {
-   static const boost::math::ntl::RR tiny = boost::math::tools::min_value<boost::math::ntl::RR>() * 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;