You can use continued fractions for monadic  ^  and  ^.  , see formulas
4.2.40 and 4.1.39 in the Handbook of Mathematical Functions by Abramowitz
ad Stegun

http://people.math.sfu.ca/~cbm/aands/intro.htm

and the following.  See verb pwr below.  Watch for line wrap.  --Kip Murray

   NB. Continued fraction evaluations for exp and ln

   exparg =: 0 1 1 , (1 ,~ -@]) , [: ,/ (2 ,~ ]) ,"1 (3 + 2 * i.@[) ,.~ -@]

   NB. From Abramowitz and Stegun formula 4.2.40
   NB. Provides 4x+5 partial numerators and denominators
   NB. of the continued fraction for exp y .

   cf =: +`%/

   exp =: [: cf 20 exparg ]

   lnarg =: 0 , (1 ,~ ]) , [: ,/ (2 + [: i. 2 * [) ,.~ ( [: , [: ,.~ ([: *:
1 + i.@[) * ] )

   NB. From Abramowitz and Stegun formula 4.1.39
   NB. Provides 4x+3 partial numerators and denominators
   NB. of the continued fraction for ln 1+y .

   ln =: [: cf 20 lnarg _1 + ]  NB. y may not be negative

   pwr =: [: exp ] * ln@[  NB. x may not be negative

   exp 1
2.718281828
   ln 1
0
   ln 2
0.6931471806
   2 pwr 3
8
   0j1 pwr 2
_1j_5.654319434e_16
   0j1 ^ 2
_1


On Tuesday, August 5, 2014, Dan Bron <[email protected]> wrote:

> Your series look promising, the problem I'm having is turning them into
> action.
>
> Can you post a collected set of definitions which calculate a^b for all
> real a and b without using ^ or ^. (explicitly or implicitly)?  If it
> makes it easier, it's ok to use  x^y  where it may be trivially and
> transparently replaced by  */ y$x  .
>
>
> ----- Original Message ---------------
>
> Subject: Re: [Jprogramming] Power for the powerless
>    From: Roger Hui <[email protected] <javascript:;>>
>    Date: Tue, 5 Aug 2014 12:46:22 -0700
>      To: Programming forum <[email protected] <javascript:;>>
>
> The power series I gave work for all real a and b in a^b (which is the
> original problem).
>
>
>
>
> On Tue, Aug 5, 2014 at 11:28 AM, Dan Bron <[email protected] <javascript:;>>
> wrote:
>
> > What shall we do for negative exponents and/or negative bases?
> >
> > ----- Original Message ---------------
> >
> > Subject: Re: [Jprogramming] Power for the powerless
> >    From: Marshall Lochbaum <[email protected] <javascript:;>>
> >    Date: Tue, 5 Aug 2014 12:54:22 -0400
> >      To: [email protected] <javascript:;>
> >
> > The correct trick is to invert x and negate y if x is greater than 2,
> > since
> >
> > ((%x)^(-y))  =  x^y
> >
> > . Unfortunately this eats up quite a few characters due to the reliance
> > on both x and y. Here are two ways to implement it:
> >
> > e=:1+[:+/[:*/\<:@[*(i.50)(-~%>:@[)]
> > exp=:e`(%@[e-@])@.(2<[)
> >
> > or (all on one line)
> >
> > exp=:(1+[:+/[:*/\<:@[*(i.50)(-~%>:@[)])/@((%@{.,-@{:)^:(2<{.))@,
> >
> > Either is a complete solution to the given problem aside from the "no
> > array operations" restriction, although the parameter of 50 is too small
> > for some arguments.
> >
> > Marshall
> >
> > On Tue, Aug 05, 2014 at 12:12:29PM -0400, Marshall Lochbaum wrote:
> > > The binomial series can be implemented efficiently by grouping the
> terms
> > > like this:
> > >
> > > ((1+x)^y)  =  1 + (x*y) * 1 + (x*2%~y-1) * 1 + (x*3%~y-2) ...
> > >
> > > that is,
> > >
> > > 1 + +/ */\ x * (y-i._)%(>:i._)
> > >
> > > Putting it together (and remembering to decrement x), we have
> > >
> > > exp =: 1 + [: +/ [: */\ <:@[ * (i.50) (-~%>:@[) ]
> > >
> > >    1.3 exp 9.6
> > > 12.4124
> > >    1.3^9.6
> > > 12.4124
> > >    1.3 (exp - ^) 9.6
> > > 5.32907e_15
> > >
> > > Unfortunately, this only converges for x where 1 >: |x-1 , that is, a
> > > disc in the complex plane around 1 of radius 1. To extend it to a
> > > complete solution, we need to rescale x to fit in that circle. For
> > > positive numbers, we can take the square root of x and double y until x
> > > is between zero and two. But that's already quite unwieldy. It's
> > > probably better to use the exp-multiply-log solution.
> > >
> > > Marshall
> > >
> > > On Tue, Aug 05, 2014 at 02:14:39PM +0100, Jon Hough wrote:
> > > > The J is a little out of my league, but for non-integers, youcould
> use
> > Binomial Theorem, as I said.(
> http://en.wikipedia.org/wiki/Binomial_series)
> > > > e.g.
> > > > e^pi = (1+(e-1))^pi   =  1+ pi*e + pi*(pi - 1)*e*e/2! +...
> > > > There's no exponentiation and you can calculate to arbitrary
> precision.
> > > >
> > > > > Date: Tue, 5 Aug 2014 05:33:42 -0700
> > > > > From: [email protected] <javascript:;>
> > > > > To: [email protected] <javascript:;>
> > > > > Subject: Re: [Jprogramming] Power for the powerless
> > > > >
> > > > > "A really simple approach would be "
> > > > >
> > > > > for integer powers,
> > > > >
> > > > > pow =: [: */ #~
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > ----- Original Message -----
> > > > > From: Raul Miller <[email protected] <javascript:;>>
> > > > > To: Programming forum <[email protected] <javascript:;>>
> > > > > Cc:
> > > > > Sent: Tuesday, August 5, 2014 2:36:53 AM
> > > > > Subject: Re: [Jprogramming] Power for the powerless
> > > > >
> > > > > A really simple approach would be to use T.
> > > > >
> > > > >    pow=: ^ T. 99
> > > > > That gives you a polynomial expression
> > > > >
> > > > >
> > > > > Here's a shorter version:
> > > > >
> > > > >    ^ T. 4
> > > > >
> > > > > 1 1 0.5 0.16666666666666666&p.
> > > > >
> > > > > Here's the more accurate version:
> > > > >
> > > > >    (^ -: pow) 10 11 12
> > > > >
> > > > > 1
> > > > >
> > > > >
> > > > > It's not necessarily efficient, but it's really simple.
> > > > >
> > > > >
> > > > > Thanks,
> > > > >
> > > > >
> > > > > --
> > > > >
> > > > > Raul
> > > > >
> > > > >
> > > > >
> > > > > On Tue, Aug 5, 2014 at 1:01 AM, Dan Bron <[email protected] <javascript:;>>
> wrote:
> > > > >
> > > > > > That's a long page, but in brief: can you calculate the power
> > series
> > > > > > without using ^ explicitly or implicitly (e.g. via t. or #: etc)?
> >  Are all
> > > > > > the ^s I see in those power series easily replaced by instances
> of
> > > > > > */@:#"0  ?
> > > > > >
> > > > > > In other words, does that page teach me how to do the trick when
> > literally
> > > > > > the only mathematical functions in my toolbox are (dyads) + - * %
> > and
> > > > > > (monad) | ?
> > > > > >
> > > > > > -Dan
> > > > > >
> > > > > > ----- Original Message ---------------
> > > > > >
> > > > > > Subject: Re: [Jprogramming] Power for the powerless
> > > > > >    From: Roger Hui <[email protected] <javascript:;>>
> > > > > >    Date: Mon, 4 Aug 2014 21:51:08 -0700
> > > > > >      To: Programming forum <[email protected]
> <javascript:;>>
> > > > > >
> > > > > > ?Can you not just use power series (for both exp and ln)?  See
> > > > > >
> > http://www.jsoftware.com/jwiki/Essays/Extended%20Precision%20Functions
> .?
> > > > > >
> > > > > >
> > > > > > On Mon, Aug 4, 2014 at 9:39 PM, Dan Bron <[email protected]
> <javascript:;>> wrote:
> > > > > >
> > > > > > > There's a StackExchange puzzle which challeges us to implement
> > power
> > > > > > (i.e.
> > > > > > > dyad ^) using only the simple arithmetic dyads + - * % and
> monad
> > | [1].
> > > > > > In
> > > > > > > other words, we may not use ^ or ^. or variants.  There are
> > still several
> > > > > > > open questions on the puzzle, not least of which involves the
> > domain of
> > > > > > > the inputs (can the base be negative?) and range of the outputs
> > (how much
> > > > > > > precision is required?), but neverthless we can make some
> > assumptions and
> > > > > > > start to sketch an approach.
> > > > > >
> > > > > >
> > > > > >
> > ----------------------------------------------------------------------
> > > > > > 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
> > ----------------------------------------------------------------------
> > 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
>


-- 
Sent from Gmail Mobile
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to