Generalizing solution of Groeneveld to rank _ gives

powGB=: 4 : 0 
 if. y-: 0$~ $y do. 1$~ $y return. end.
 (t{1,x)* *: x powGB y-:@- t=.2|y
)

However not more efficient than his powG

   5 ts '3x powG 10000+i.100'
0.44326567 1717376
   5 ts '3x powGB 10000+i.100'
0.44926465 6452864
   3x (powG-:powGB) 10000+i.100
1


R.E. Boss


> -----Oorspronkelijk bericht-----
> Van: [EMAIL PROTECTED] [mailto:programming-
> [EMAIL PROTECTED] Namens R.E. Boss
> Verzonden: maandag 21 juli 2008 6:46
> Aan: 'Programming forum'
> Onderwerp: RE: [Jprogramming] Speeding up dyad ^ for x: results
> 
> For array arguments we need powH1:
> 
>   powH1=: 4 : '*/ *~^:(I.|.#:y) x'"0
> 
>    5 ts '3x powH1 10000+i.100'
> 0.45149128 1724544
> 
>    5 ts '3x powG 10000+i.100'
> 0.40380589 1717376
> 
>    3x (powG-:powH1) 10000+i.100
> 1
> 
> But improvement is possible:
> 
>   powHB=: 4 : '(|."1 #: y) (*/@#) *~^:(i.>.2^.>./y) x'
> 
>    3x (powHB-:powH1) 10000+i.100
> 1
> 
>    5 ts '3x powHB 10000+i.100'
> 0.19307246 1731712
> 
> 
> R.E. Boss
> 
> 
> > -----Oorspronkelijk bericht-----
> > Van: [EMAIL PROTECTED] [mailto:programming-
> > [EMAIL PROTECTED] Namens R.E. Boss
> > Verzonden: maandag 21 juli 2008 5:21
> > Aan: 'Programming forum'
> > Onderwerp: RE: [Jprogramming] Speeding up dyad ^ for x: results
> >
> > In http://www.jsoftware.com/jwiki/Essays/Repeated_Squaring Hui described
> > this solution already.
> >
> > powG=: 4 : 0"0
> >   if. 0=y do. 1 return. end.
> >   if. 2|y do. x * *: x powG -:<:y  else. *: x powG -:y  end.
> > )
> > powG1=: 4 : '(*:@]`(x**:@])@.[)/,1x,~2|<[EMAIL PROTECTED]:^:a:,y'"0
> >
> > powH=: 4 : '*/ *~^:(I.|.#:y) x'
> >
> >    5 ts '3x powG 100000'
> > 0.38914173 332672
> >    5 ts '3x powG1 100000'
> > 0.38533968 343680
> >    5 ts '3x powH 100000'
> > 0.43796215 594048
> >
> >    3x (powG-:powH)100000
> > 1
> >
> >
> > R.E. Boss
> >
> >
> > > -----Oorspronkelijk bericht-----
> > > Van: [EMAIL PROTECTED] [mailto:programming-
> > > [EMAIL PROTECTED] Namens Arie Groeneveld
> > > Verzonden: zondag 20 juli 2008 18:35
> > > Aan: Programming forum
> > > Onderwerp: [Jprogramming] Speeding up dyad ^ for x: results
> > >
> > > I don't know if this already passed the forum: how to speed up
> > > exponentiation x^y with y>:0 for integer arguments giving a x: result;
> > > e.g. if you have to change to x: in case:
> > >
> > > y > ([:<.308*%@(10&^.))"0, x
> > >
> > >
> > >    ([:<.308*%@(10&^.))"0, 2
> > > 1023
> > >
> > >    2^1023
> > > 8.988465674e307
> > >
> > >    2^1024
> > > _
> > >
> > >    2x^1024
> > > 17976931348................
> > >
> > >
> > >  From existing algorithms:
> > >
> > > pow=: 4 : 0"0
> > >   if. 0=y do. 1 return. end.
> > >   if. 2|y do. x * *: x pow -:<:y  else. *: x pow -:y  end.
> > > )
> > >
> > > or:
> > > powi=: 4 : '(*:@]`(x**:@])@.[)/,1x,~2|<[EMAIL PROTECTED]:^:a:,y'"0
> > >
> > > or:
> > > powt=: ((*:@[$:-:@])`([**:@[$:-:@<:@])@.(2|]))`1:@.(0=])"0
> > >
> > > and:
> > > pow2=: (*/@:^2x^I.@|[EMAIL PROTECTED]:@])"0
> > >
> > > >From  ~help/dictionary/cwhile.htm :
> > >
> > > exp =: 4 : 0"0
> > >  z=.1
> > >  a=.x
> > >  n=.y
> > >  while. n do.
> > >   if. 2|n do. z=.z*a end.
> > >   a=.*:a
> > >   n=.<.-:n
> > >  end.
> > >  z
> > > )
> > >
> > >    ts '3x ^ 100000'
> > > 3.138055 362560
> > >
> > >    ts '3x pow 100000'
> > > 1.298968 166464
> > >
> > >    ts '3 powi 100000'
> > > 1.299312 171776
> > >
> > >    ts '3x powt 100000'
> > > 3.138818 209152
> > >
> > >    ts '3 pow2 100000'
> > > 3.716827 576896
> > >
> > >    ts '3x exp 100000'
> > > 3.154187 231680
> > >
> > >
> > > pow and powi are reasonable candidates. Is there more to gain?
> > >
> > >
> > > =@@i
> > >
> > >
> > > ----------------------------------------------------------------------
> > > For information about J forums see http://www.jsoftware.com/forums.htm
> >
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> 
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to