---Brian Schott wrote:
>         I have been studying the variations on normalrand
> some more and have a few improvements and some puzzlement
> about J's behavior, too.
[snip]
>         The original normalrand does NOT produce (a,b) pairs
> of variates, but all the others do produce the variates in
> pairs. The others produce (a,b) pairs of random varates in
> different orders, they all produce valid pairs of variates.

I've just worked out the thing that normalrand does that the others don't:

   normalrand 3 4
_0.122699  _1.99223 _0.704035 _0.0808088
_0.250496   0.48138  0.764205  _0.794871
  1.45207 _0.696283 _0.453133    1.01379

   normalrand2 3 4
_1.66701 _0.640152 0 0
 0.94087 _0.588251 0 0
  1.0616 _0.662911 0 0

   normalrand6a 3 4
|length error: normalrand6a
|       normalrand6a 3 4

Some small alterations fix that:
normalrand2a=: 3 : 0
  n =. >. -: */y
  a=. %: _2* ^. rand01 n
  b=.      +: o. rand01 n
  r1 =. a * 2 o. b
  r2 =. a * 1 o. b
  y$r1,r2
)

normalrand6b=: ] $ ,@((2 1 o."0 1 +:@:o.@:rand01) *"1 [: %: 
_2&*@:^.@:rand01)@>[EMAIL PROTECTED]:@(*/)

   normalrand2a 3 4
 0.63111367  1.3648031 _0.68584133 _0.74547942
_0.63025564 _1.4558397  _1.8241795  0.22040767
_0.49059304  1.8463946 _0.45497306   1.3861815
   normalrand6b 3 4
0.67241889  0.95258629  _1.2074204 0.058530861
0.64824598  0.93121615  0.62299124  0.33683066
_1.3331847 _0.57881303 _0.45320203  0.44516874

   10 ts 'normalrand   numb'
0.024500181 10488320
   10 ts 'normalrand2  numb'
0.017422885 4196608
   10 ts 'normalrand2a numb'
0.017089022 4196608
   10 ts 'normalrand6a numb'
0.016773354 2622592
   10 ts 'normalrand6b numb'
0.017133078 2622656
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to