Re: [eigen] How to raise double to array powers in Eigen

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]




On Mon, Aug 18, 2014 at 1:28 PM, Christoph Hertzberg <chtz@xxxxxxxxxxxxxxxxxxxxxxxx> wrote:
On 18.08.2014 00:23, Ian Bell wrote:
cross-posted to stack overflow...

If you cross-post, could you post a link as well?
Here's the link: http://stackoverflow.com/questions/25354205/how-to-raise-double-to-array-powers-in-eigen


I need to raise a double value to an array of integer powers, in c++ this
would look something like

Could you be a bit more specific about the "array of integer powers" (I guess 'exponents')?
If they are a sequence 0,1,2,3,... your proposed solution is definitely very inefficient. If they are of great range, with no apparent pattern, I would say the exp(log(delta)*exponent) approach is basically the most efficient solution (maybe using log2 and exp2 would be more efficient, if they were available).

The exponents are typically in the range [0, 10), and can be sorted if that is of use.  They are not necessarily linearly increasing, we might have exponents 0,0,0,1,1,1,1,2,2 for instance.  Obviously it would be better to short-circuit the 0 powers as well since they yield 1 again (x^0=1).  This method with the exp(log(delta)*exponent) also doesn't allow you to skip those powers..  I think that the >0 comparison should be cheaper than doing pow(x, 0) when 0 is integer.  Especially this will be true when using exp().
 

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
----------------------------------------------





Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/