What Adin Falkoff had to say about right-to-left, esp. regarding in
reduction:

The major trend that I see in the change from the book to the formal
description was a unification of the treatment of scalar operators. There
was also at that time a recognition of the value of dispensing completely
with operator precedents and letting the order of execution come from right
to left. We noted particularly at that time the advantages in reduction in
making that rule (you may have noticed that in the book the reduction goes
from left to right), and there was considerable debate among us at that
time about changing the rule and I think that what really swung the balance
was the recognition that this would give far more interesting mathematical
functions than the other; namely, that reduction with things like minus and
divide gave you alternating sums and alternating products, which were not
easily achieved otherwise, whereas the left to right was kind of a dull
thing, just the first element minus the sum of the others. And so this,
plus the trend towards uniformity, sort of forced that particular
development.


Adin Falkoff, *APL\360 History
<https://www.jsoftware.com/papers/apl360history.htm>*, 1969.


On Tue, Dec 22, 2020 at 11:48 AM Roger Hui <[email protected]>
wrote:

> There are simpler demonstrations of the use of -/ .  See
> https://code.jsoftware.com/wiki/Essays/Extended_Precision_Functions#Sine_and_Cosine
>
> Exercise for the reader:  What's a "use" of -\ ?  (Published in June 1981.)
>
> On Tue, Dec 22, 2020 at 10:44 AM Devon McCormick <[email protected]>
> wrote:
>
>> Thanks everyone for the tips!
>>
>> Bob - your suggestions still stalls:
>>    20j18":%12x*-/chudSeriesa i.2
>> 3.141592653589788641
>>    20j18":%12x*-/chudSeriesa i.3
>> 3.141592653589788641
>> (Should be
>> 3.14159265358979323846...
>> as we all know :) )
>>
>> Roger's suggestion will take me longer to translate.
>>
>> I got into this diversion from thinking about the array languages FAQ I
>> mentioned in the KEI Centenary discussion last Thursday.  One of the first
>> objections a lot of people have is the right-to-left order of evaluation
>> and I wanted a good illustration of how this gives you alternating sum
>> with
>> -/ .   I found it discouraging to read a recent missive from Niklaus Wirth
>> where he takes a jab at this useful simplification as an example of an
>> unwarranted complication.  It's sad that an eminent luminary like this has
>> failed to grasp,  after all these years, how useful this convention is.
>>
>> The Chudnovsky formula is a good illustration because it includes a "_1^k"
>> term to force the alternating sum.
>>
>>
>>
>>
>> On Tue, Dec 22, 2020 at 12:56 PM Roger Hui <[email protected]>
>> wrote:
>>
>> > In the J source, file vx.c, function jtxpi(), you find an
>> implementation of
>> > the Chudnovsky algorithm using extended precision arithmetic.  It is in
>> C
>> > but it should not be too hard to figure out the J equivalent.
>> >
>> > static XF1(jtxpi){A e;B p;I i,n,n1,sk;X a,b,c,d,*ev,k,f,m,q,s,s0,t;
>> >  RZ(w);
>> >  if(!XDIG(w))R xzero;
>> >  ASSERT(jt->xmode!=XMEXACT,EVDOMAIN);
>> >  RZ(a=xc(545140134L));
>> >  RZ(b=XCUBE(xc(640320L)));
>> >  RZ(c=xc(13591409L));
>> >  RZ(d=xplus(xc(541681608L),xtymes(xc(10L),xc(600000000L))));
>> >  n1=(13+AN(w)*XBASEN)/14; n=1+n1;
>> >  RZ(e=piev(n,b)); ev=XAV(e); m=ev[n1];
>> >  f=xzero; s0=xone; sk=1;
>> >  for(i=p=0;;++i,p=!p){
>> >   s=xtymes(s0,xplus(c,xtymes(a,xc(i))));
>> >   t=xdiv(xtymes(s,m),ev[i],XMEXACT);
>> >   f=p?xminus(f,t):xplus(f,t);
>> >   if(i==n1)break;
>> >   DO(6, s0=xtymes(s0,xc(sk++));); RE(s0);  /* s0 = ! 6*i */
>> >  }
>> >  f=xtymes(d,f);
>> >  q=xpow(xc(10L),xc(14*n1));
>> >  k=xtymes(xtymes(a,m),xsqrt(xtymes(b,xsq(q))));
>> >  R xdiv(xtymes(k,w),xtymes(f,q),jt->xmode);
>> > }    /* Chudnovsky Bros. */
>> >
>> >
>> > On Tue, Dec 22, 2020 at 9:30 AM Devon McCormick <[email protected]>
>> > wrote:
>> >
>> > > The Chudnovsky algorithm -
>> > > https://en.wikipedia.org/wiki/Chudnovsky_algorithm - is supposed to
>> have
>> > > the fastest convergence for pi (or 1/pi, to be exact).  I had tried
>> this
>> > > one which is OK but only seems to add one digit for each power of 10:
>> > >    6!:2 'pi=. 4*-/%>:+:i. 1e6'
>> > > 0.0145579
>> > >    20j18":pi
>> > > 3.141591653589793420
>> > >    6!:2 'pi=. 4*-/%>:+:i. 1e7'
>> > > 0.140673
>> > >    20j18":pi
>> > > 3.141592553589793280
>> > >    6!:2 'pi=. 4*-/%>:+:i. 1e8'
>> > > 1.44487
>> > >    20j18":pi
>> > > 3.141592643589793177
>> > >    6!:2 'pi=. 4*-/%>:+:i. 1e9'
>> > > 16.7988
>> > >    20j18":pi
>> > > 3.141592652589793477
>> > >
>> > > The Chudnovsky series is fast and gives me 15 correct decimal digits
>> for
>> > > only 2 iterations but fails to improve after that presumably because
>> of
>> > > floating point limitations:
>> > >    20j18":%12*-/chudSeries i.2
>> > > 3.141592653589795336
>> > >    20j18":%12*-/chudSeries i.3
>> > > 3.141592653589795336
>> > >    20j18":%12*-/chudSeries i.4
>> > > 3.141592653589795336
>> > >    chudSeries i.4
>> > > 0.0265258 4.98422e_16 2.59929e_30 1.45271e_44
>> > >
>> > > However, when I try to use extended precision, it does not seem to
>> give
>> > me
>> > > extended precision results:
>> > >    chudSeries=: 13 : '((!6x*x: y)*13591409x+545140134x*x: y)%(!3x*x:
>> > > y)*(3x^~!x: y)*640320x^3r2+3x*x: y'
>> > >
>> > > I get the same fp values for the "i.4" argument as shown above.  Am I
>> > doing
>> > > something wrong or overlooking something?
>> > >
>> > > Thanks,
>> > >
>> > > Devon
>> > >
>> > > --
>> > >
>> > > Devon McCormick, CFA
>> > >
>> > > Quantitative Consultant
>> > > ----------------------------------------------------------------------
>> > > For information about J forums see
>> http://www.jsoftware.com/forums.htm
>> > >
>> > ----------------------------------------------------------------------
>> > For information about J forums see http://www.jsoftware.com/forums.htm
>> >
>>
>>
>> --
>>
>> Devon McCormick, CFA
>>
>> Quantitative Consultant
>> ----------------------------------------------------------------------
>> 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