See also Roger's essay:

https://code.jsoftware.com/wiki/Essays/Chudnovsky_Algorithm

On Tue, Dec 22, 2020 at 3:22 PM Hauke Rehr <hauke.r...@uni-jena.de> wrote:
>
> a worthy read, thanks
>
> I think I fell in love with J in part
> due to its notationally pleasant guise
> There are so many debates in notation.
> I personally prefer τ over π but I’m
> okay with o.1 and 1p1 meaning πª
> (I’d like to have 1t1 at my disposal);
> and I’m unsure about the Triangle of Power
> but I think it’s worth considering,
> at least in education;
> etc. etc.
>
> As for parethesesº, I’m amoung those trying to avoid paren-noise as much
> as possible (in tex, for example, I build mostly commands taking single
> letters, symbols or commands as input so I may omit braces – but I agree
> this can render texts unreadable if applied excessively).
>
> This personal taste notwithstanding, I do appreciate your
> aesthetics-based plea for expressions like (x>0)-(x<0),
> but I’d rather say x (> - <) 0 instead. (DRY principle)
>
> And I forgot to mention I also think 3. is another important argument.
> When I taught J to pupils recently, they were overwhelmed by the way
> this actually is more readable and intuitive, e. g.
> append =: ,
> product_of_items =: */
> append_its_product =: append product_of_items
> when I had been talking about forks.
>
>
> ª now we’re back with this thread’s topic – in some way
> º in German, “Klammern” are any of ()[]{}
>
>
> Am 22.12.20 um 22:00 schrieb Roger Hui:
> > May I suggest that you read Conventions Governing Order of Evaluation
> > <https://www.jsoftware.com/papers/EvalOrder.htm> [Iverson 1966].
> >
> >
> > On Tue, Dec 22, 2020 at 12:46 PM Hauke Rehr <hauke.r...@uni-jena.de> wrote:
> >
> >> IMO the value of right-to-left data flow is
> >> that it reflects the way math notation works.
> >> operatorD operatorC operatorB operatorA data
> >> is “evaluated” from right to left.
> >> -/ I used to consider merely a convenience.
> >> Having read Roger’s answers, I guess I might
> >> have been wrong.
> >>
> >> !warning: opinions/ranting ahead!
> >> Anyone objecting against this doesn’t know
> >> or doesn’t like maths.
> >> Sadly, even methematicians often don’t know
> >> their grammar, writing incomprehensible nonsense
> >> like (ℚ is dense in ℝ)
> >> ∃q∈ℚ: d(q,r)<ε ∀r∈ℝ, ε>0
> >> instead of (my preferred way)
> >> ∀(r,R)∈ℝ²∩<: ∃q∈ℚ: ((r,q),(q,R))∈<²
> >> One might argue for “r<q<R” to be an okay alternative
> >> for the part after the last colon. I’d disagree still.
> >> What would “true<R” or “r<false” mean?
> >>
> >> Am 22.12.20 um 19:44 schrieb Devon McCormick:
> >>> 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
> >>>>
> >>>
> >>>
> >>
> >> --
> >> ----------------------
> >> mail written using NEO
> >> neo-layout.org
> >>
> >> ----------------------------------------------------------------------
> >> For information about J forums see http://www.jsoftware.com/forums.htm
> >>
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> >
>
> --
> ----------------------
> mail written using NEO
> neo-layout.org
>
> ----------------------------------------------------------------------
> 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