summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary/gallivm/f.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/auxiliary/gallivm/f.cpp')
-rw-r--r--src/gallium/auxiliary/gallivm/f.cpp25
1 files 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 <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;