Thanks Kip! ----- Original Message ---------------
Subject: Re: [Jprogramming] Power for the powerless From: Kip Murray <[email protected]> Date: Wed, 6 Aug 2014 13:47:02 -0500 To: "[email protected]" <[email protected]> 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 ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
