Since it's not really important in the scheme of things
and since the slow expression is curious (i.e. odd i.e. strange),
I am not inclined to spend the time to investigate.

Do you understand what x:@+/ does?  In x+y if 
one argument is float the other argument is converted 
to float if necessary before the addition. Therefore,
on floating point a,b,c,d
   x:@+/ a,b,c,d
   a x:@+ b x:@+ c x:@+ d
   x: a + fx x: b + fx x: c + d
where fx is x:^:_1, converting extended precision
to float.   That is, the x: gets you nothing.  That you 
got the right answer using x:@+/ means one of 
the following:
a. coincidence; or
b. extended precision is not needed, whence
+/ works just as well; or
c. n is created to be extended precision, whence
+/ works just as well.



----- Original Message -----
From: "[EMAIL PROTECTED]" <[EMAIL PROTECTED]>
Date: Friday, September 28, 2007 11:46
Subject: Re: [Jprogramming] Performance of exact keyed aggregate
To: [email protected], [email protected]

> 
> Thanks ...
> 
> Well, I did get the right result using
>    (v (</.) i)(x:@+/@:{)every <n
> while i had to kill 
>    v (x:@+//.) n
> so I'd still like thoughts on why the 
> latter indexed version performs 
> much better than the former.  Raul 
> seems to agree that it should work... 
> 
> I'm not on a J machine right now, so 
> can't test the variant phrases. 
> 
> Thanks, Mike
> 
> Original Message:
> -----------------
> From: Roger Hui [EMAIL PROTECTED]
> Date: Fri, 28 Sep 2007 10:56:37 -0700
> To: [email protected]
> Subject: Re: [Jprogramming] Performance of exact keyed aggregate
> 
> 
> If you need exact integer results the expression should be
> v +//. x: n   (or just v +//. n with n created to be 
> extended precision).
> v x:@+//. n  is a curious phrase and does not achieve the 
> intent 
> expressed in your msg.
> 
> 
> 
> ----- Original Message -----
> From: Mike Day <[EMAIL PROTECTED]>
> Date: Friday, September 28, 2007 3:07
> Subject: [Jprogramming] Performance of exact keyed aggregate
> To: Programming forum <[email protected]>
> 
> > Given values v, counts n:
> >    v,:n
> > 1  2  1  2  1  2  1  
> 2  1
> > 20 30 40 30 40 20 40 30 40
> > 
> > We can sum the counts keyed by value
> >    v (+//.) n
> > 180 110
> >    since
> >    v (</.) n
> > +--------------+-----------+
> > |20 40 40 40 40|30 30 20 30|
> > +--------------+-----------+
> > 
> > However my actual values for count get very large,
> > ie up to 2^50 or more, and I needed exact integer results
> > so used
> >    v (x:@+//.) n
> > 180 110
> > 
> > but this got very slow. 
> > 
> > However once I used the indices i of the counts
> >    i,v,:n
> >  0  1  2  1  2  0  2  
> > 1  2
> >  1  2  1  2  1  2  1  
> > 2  1
> > 20 30 40 30 40 20 40 30 40
> > 
> > the more indirect derivation
> >    (v (</.) i)
> > +---------+-------+
> > |0 2 2 2 2|1 1 0 1|
> > +---------+-------+
> >    (v (</.) i)(x:@+/@:{)every <n
> > 180 110
> > 
> > is much quicker. 
> > 
> > Any ideas why the circumlocution is faster than
> > the more obvious approach?  (I don't know how
> > much because the slow version never finished.)
> > 
> > Not really important in the scheme of things -
> > just a day lost in a Mathschallenge solution! 
> > I hope that's not a give-away.
> -----------------------------------------------------------------
> -----
> For information about J forums see http://www.jsoftware.com/forums.htm
> 
> -----------------------------------------------------------------
> ---
> mail2web.com – Enhanced email for the mobile individual based on 
> Microsoft®Exchange - http://link.mail2web.com/Personal/EnhancedEmail
> 
> 
> -----------------------------------------------------------------
> -----
> 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