I knew I should have noted it when I saw it.  I think it was a response on
a blog.  I will see if I can dig it up.  It was a few months ago.

On Wed, Dec 23, 2020 at 5:03 AM R.E. Boss <r.e.b...@outlook.com> wrote:

> " 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."
>
> What was that "recent missive from Niklaus Wirth" ?
>
>
> R.E. Boss
>
>
> -----Original Message-----
> From: Programming <programming-boun...@forums.jsoftware.com> On Behalf Of
> Devon McCormick
> Sent: dinsdag 22 december 2020 19:44
> To: J-programming forum <programm...@jsoftware.com>
> Subject: Re: [Jprogramming] Chudnovsky algo for π (Pi) using extended
> arithmetic
>
> 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 <rogerhui.can...@gmail.com>
> 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 <devon...@gmail.com>
> > 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
>


-- 

Devon McCormick, CFA

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

Reply via email to