This is getting silly, but:

   ^T.10

1 1 0.5 0.16666666666666666 0.041666666666666664 0.0083333333333333332
0.0013888888888888889 0.00019841269841269841 2.4801587301587302e_5
2.7557319223985893e_6&p.


   exp=: 1 + (* 1+ (* 0.5 +
(*1r6+(*1r24+(*1r720+(*1r5040+(*1r40320+(*1r362880"_))))))))


That's not accurate enough, except for exponents near zero, but it's enough
to illustrate the principle.


Thanks,


-- 

Raul




On Tue, Aug 5, 2014 at 9:49 AM, Dan Bron <[email protected]> wrote:

> Raul wrote:
> >   A really simple approach would be to use T.
> >     pow=: ^ T. 99
>
> First: probably a better name for your function is "exp" instead of "pow"
> ("exp" is a monad related to the dyad "pow" by fixing its left argument to
> 1x1).
>
> But certainly exp is a welcome improvement over my formulation, with a
> couple caveats. Specifically, even if we write off the presence of the
> primitive ^ in ^T.99 as permissible due to the use-mention distinction,
> the result of T., as you point out:
>
> >  gives you a polynomial expression
>
> i.e., is an expression involving p., which is not one of the specifically
> enumerated operations. More problematic, it has an implicit use of ^ (the
> DoJ explicitly defines x p. y  as  +/x*y^i.#x).  This is why I explicitly
> excluded T.'s cousin t. in the message you replied to:
>
> >  can you calculate the power series without using ^
> >  explicitly or implicitly (e.g. via t. or #: etc)?
>
> With that said, you made me realize that the Taylor coefficients for ^y are
> fairly straightforward, and I can calculate them without t. or T. or even
> ! :
>
>    exp =: 250 & ( # +/ . % &(_1 |.!.1 */\) >:@:i.@:[ )
>
> [I have no idea how many terms I should include, but 250 seemed sufficient
> for the spot checks I did.]
>
> Which is a lot more precise than my previous *:
>
> >     exp      =:  1e5 spow~ 1 + %&1e5
> >      spow   =:  */@:#~
>
> Unfortunately, since most of the complexity of my original function is in
> the estimatation of ^.y (that is, log), it mutes the impact of this
> improvement to ^y (unless someone can show me how to generalize it to  x^y
>   i.e., truly pow, not exp?).
>
> However, Jon Hough's suggestion looks very promising:
>
> >   x^y =  (1 +(x-1))^y
> >   e^pi = (1+(e-1))^pi   =  1+ pi*e + pi*(pi - 1)*e*e/2! +...
> >   http://en.wikipedia.org/wiki/Binomial_series
>
> Let me play with that a bit.
>
> -Dan
>
> * Speaking of spow, Pascal wrote:
>
> >  "A really simple approach would be"
> >  for integer powers,
> >     pow =: [: */ #~
>
> Yes, spow is a core function of the more general pow; but note it's not for
> all "integer powers", it's for non-negative integer powers.  See also the
> RosettaCode "exponentiation" task [1], which shows how to generalize this
> to negative powers simply:
>
> >   exp  =:  *@:] %: */@:(#~|)
>
> But unfortunately, this uses  %:  which is not in our toolbox either.
>
> [1]  RC: Exponentiation in J
>      http://rosettacode.org/wiki/Exponentiation_operator#J
>
>
> ----------------------------------------------------------------------
> 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