Re: [eigen] How to raise double to array powers in Eigen |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
On 19.08.2014 16:13, Ian Bell wrote:
New idea:
1. Cache the set of exponents in a std::map<int, double>
Just a warning: std::map is often very inefficient, as it requires
multiple branches and indirect memory accesses. If the key is int, and
the range is known and not too big, it is very often much more efficient
to use a plain C-array or a std::vector.
E.g.
int lo = 3, hi=17; // calculate powers from 3 to 16
std::vector<double> powers(hi-lo);
double power=std::pow(base, lo);
for(int i=0; i<hi-lo; ++i) {
powers[i]=power;
power *= base;
}
// Access pow(base, ex) like this:
double res = powers[ex-lo];
If the exponents are sorted, you can probably safe the extra table and
simply accumulate the power variable as you go through the result array.
Christoph
--
----------------------------------------------
Dipl.-Inf., Dipl.-Math. Christoph Hertzberg
Cartesium 0.049
Universität Bremen
Enrique-Schmidt-Straße 5
28359 Bremen
Tel: +49 (421) 218-64252
----------------------------------------------