> https://en.m.wikipedia.org/wiki/GNU_Multiple_Precision_Arithmetic_Library

said GMP is LGPL and GPL dual licensed and both Mathematica and Maple use
GMP.  Apparently it is safe to usr GMP even in commercial source of j
engine.  (IANAL)
On Sep 3, 2015 5:23 AM, "'Pascal Jasmin' via Programming" <
programm...@jsoftware.com> wrote:

> GMP has some (I think minor) performance improvements over openssl BN, but
> openssl is already being distributed with J.  Doesn't that seem like a
> reasonable candidate?
>
>
> ----- Original Message -----
> From: Jose Mario Quintana <jose.mario.quint...@gmail.com>
> To: Programming forum <programm...@jsoftware.com>
> Cc:
> Sent: Wednesday, September 2, 2015 4:53 PM
> Subject: Re: [Jprogramming] Comparing J speed
>
> That is a big factor but perhaps it is not quite a surprise to some members
> of this forum.  Yes, I would like to see the Haskell version please; thanks
> in advance.
>
> It seems that if one wants to play with "arbitrary precision arithmetic,
> operating on signed integers, rational numbers, and floating-point
> numbers" efficiently,
> one would have to use Haskell, Mathematica or a another language that
> implements GMP (hopefully J will not be left behind for too long in this
> area).
>
>
>
>
> On Wed, Sep 2, 2015 at 2:48 PM, aai <agroeneveld...@gmail.com> wrote:
>
> > Even without the rep. squaring in J of f7a the Haskell version is ~ 33x
> > faster in the GHCi interpreter. If you want to check it yourself I'll
> > e-mail you the Haskell code (to avoid remarks of Raul).
> >
> > Op 2-9-2015 om 20:03 schreef Jose Mario Quintana:
> >
> > Actually, the tacit version seems to be faster for relatively small
> >> arguments.  First allow me to rewrite fib1
> >>
> >> fib2 and your expression as verbs working with extended precision and
> >> producing the yth Fibonacci number:
> >>
> >> fib1 =:1x"_`(($:@:<:) + ($:@:-&2))@.(2&<)M.
> >>
> >> fib2 =: 3 : 0
> >>    x1 =. x:1
> >>    x2 =. x:1
> >>    c =. 0
> >>    while. c < (y-2) do.
> >>      tmp =.  x1
> >>      x1 =. x2
> >>      x2 =. tmp + x1
> >>      c=.c+1
> >>    end.
> >>    x2
> >> )
> >>
> >> fib3=. ({: @:(({: , +/)@:]^:(2-~[))&1 1x)  NB. For y >: 3!
> >>
> >> Checking,
> >>
> >>     (fib1"0 ; fib2"0 ; fib3"0) 3 4 5 6 7
> >> ┌──────────┬──────────┬──────────┐
> >> │2 3 5 8 13│2 3 5 8 13│2 3 5 8 13│
> >> └──────────┴──────────┴──────────┘
> >>
> >>     (fib1 , fib2 , fib3) 111
> >> 70492524767089125814114 70492524767089125814114 70492524767089125814114
> >>
> >> Comparing their performance,
> >>
> >>     st=. (, */&.:>@:(1 2&{))@:(] ; 7!:2@:] ; 6!:2)
> >>
> >>
> >>     st&> 'fib1 5555';'fib2 5555';'fib3 5555'
> >> ┌─────────┬─────┬────────────┬──────────┐
> >> │fib1 5555│1664 │0.0823093021│136.962679│
> >> ├─────────┼─────┼────────────┼──────────┤
> >> │fib2 5555│24704│0.0457517422│1130.25104│
> >> ├─────────┼─────┼────────────┼──────────┤
> >> │fib3 5555│23168│0.0209733696│485.911027│
> >> └─────────┴─────┴────────────┴──────────┘
> >>
> >> For large arguments, as Groeneveld pointed out, the performance is
> >> dominated by the extended precision
> >>
> >> calculations (at least for this method),
> >>
> >>    st&> 'fib2  475000';'fib3  475000'
> >> ┌────────────┬───────┬──────────┬──────────┐
> >> │fib2  475000│1315200│43.1150201│56704874.5│
> >> ├────────────┼───────┼──────────┼──────────┤
> >> │fib3  475000│1313664│44.0851651│57913094.4│
> >> └────────────┴───────┴──────────┴──────────┘
> >>
> >> The verb f7 (see,
> >>
> >>
> http://www.jsoftware.com/jwiki/Essays/Fibonacci%20Sequence#Sum_of_binomial_coefficients
> >> ) and its tacit counterpart (f7a) are indeed much faster (but they use
> >> more
> >> space),
> >>
> >>     f7a=. {.@:{:@:(+/ .*/)@:(+/ .*~@:]^:(I.@:|.@:#:@:[))&(2 2$0 1 1 1x)
> >>
> >>     (f7 , f7a)111
> >> 70492524767089125814114 70492524767089125814114
> >>
> >>     fib1 =:1x"_`(($:@:<:) + ($:@:-&2))@.(2&<)M.  NB. Resetting M.
> >>
> >>     st&> 'fib1 5555';'fib2 5555';'fib3 5555';'f7 5555';'f7a 5555'
> >> ┌─────────┬──────┬────────────┬──────────┐
> >> │fib1 5555│1664  │0.0873909161│145.418484│
> >> ├─────────┼──────┼────────────┼──────────┤
> >> │fib2 5555│24704 │0.0456825483│1128.54167│
> >> ├─────────┼──────┼────────────┼──────────┤
> >> │fib3 5555│23168 │0.0185578731│429.948804│
> >> ├─────────┼──────┼────────────┼──────────┤
> >> │f7 5555  │122368│0.002491974 │304.937875│
> >> ├─────────┼──────┼────────────┼──────────┤
> >> │f7a 5555 │88576 │0.0024376783│215.919793│
> >> └─────────┴──────┴────────────┴──────────┘
> >>
> >>    st&> 'fib3  475000';'f7  475000';'f7a  475000'
> >> ┌────────────┬───────┬──────────┬──────────┐
> >> │fib3  475000│1313664│39.7395458│52204410.8│
> >> ├────────────┼───────┼──────────┼──────────┤
> >> │f7  475000  │5551232│8.97002017│49794663  │
> >> ├────────────┼───────┼──────────┼──────────┤
> >> │f7a  475000 │5415168│7.95243101│43063749.9│
> >> └────────────┴───────┴──────────┴──────────┘
> >>
> >> However, we are comparing apples to oranges now.  Then again, maybe that
> >> was the case from the start; but, be that as it may, I wonder how the
> >> Haskell version compares to f7/f7a in the same machine...  Does anyone
> >> know?
> >>
> >>
> >>
> >>
> >> On Tue, Sep 1, 2015 at 10:34 PM, 'Pascal Jasmin' via Programming <
> >> programm...@jsoftware.com> wrote:
> >>
> >> equivalent to your explicit function, but slow on my computer
> >>>
> >>>   timespacex '({: , +/)^:(474998) 1 1x '
> >>> 63.3016 1.31469e6
> >>>
> >>>
> >>> Your's may be faster due to special code for inplace assignments.
> >>>
> >>> but there may be shortcuts to finding a direct fib number.
> >>>
> >>>
> >>> ----- Original Message -----
> >>> From: Jon Hough <jgho...@outlook.com>
> >>> To: "programm...@jsoftware.com" <programm...@jsoftware.com>
> >>> Cc:
> >>> Sent: Tuesday, September 1, 2015 8:35 PM
> >>> Subject: Re: [Jprogramming] Comparing J speed
> >>>
> >>> Apologies for the messed up fib2, I'm seriously considering dumping
> >>> outlook.com.
> >>>
> >>> From: jgho...@outlook.com
> >>>> To: programm...@jsoftware.com
> >>>> Date: Wed, 2 Sep 2015 01:32:45 +0100
> >>>> Subject: [Jprogramming] Comparing J speed
> >>>>
> >>>> In this talk https://www.youtube.com/watch?v=apBWkBDVlow
> >>>> the presenter attempts to show Haskell hasn't sacrificed speed for
> >>>>
> >>> expressiveness by comparing a Java Fibonacci calculator to his Haskell
> >>> one.(skip to the 18:00 mark).Essentially, to calculate the 475000th
> >>> Fibonacci number, it took his Java program ~8 seconds, while the very
> >>> terse
> >>> Haskell program took ~6 seconds.
> >>>
> >>>> So I tried to do the same in J. My first attempt, used a tacit,
> memoized
> >>>>
> >>> verb
> >>>
> >>>> fib1 =:1:`(($:@:<:) + ($:@:-&2))@.(2&<)M.
> >>>>
> >>>>
> >>>> However, this gives a stack error for large numbers (~100000). So I
> >>>>
> >>> decided to make an imperative verb,
> >>>
> >>>>
> >>>> fib2 =: 3 : 0 x1 =. x:1 x2 =. x:1 c =. 0 while. c < y do. tmp =.  x1
> x1
> >>>>
> >>> =. x2 x2 =. tmp + x1 c=.c+1 end. x2
> >>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> )
> >>>>
> >>>>
> >>>> This gets there, I can calculate the 475000th Fibonacci number, but
> >>>>
> >>>>
> >>>> timespacex 'fib2 475000'
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> 36.183 1.31558e6
> >>>>
> >>>>
> >>>> It takes 36 seconds (of course, my hardware is different to that in
> the
> >>>>
> >>> presentation, but still...).
> >>>
> >>>>
> >>>> Is there a speedier way to do this in J? Preferably a tacit one liner
> >>>>
> >>> would also be good.
> >>>
> >>>>
> >>>> Thanks,
> >>>> Jon
> >>>>
> >>>>
> >>>> ----------------------------------------------------------------------
> >>>> 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

Reply via email to