Please see the J6.01 dictionary page for ?
http://www.jsoftware.com/books/help/dictionary/d640.htm

In particular, since 9!:44 captures and 9!:45 sets
the RNG state, and the state completely determines
the generated numbers, it is straightforward to
implement independent versions of ? .  For example:

inita=: 3 : 0
 9!:1 seeda=: y
 statea=: 9!:44 ''
 i. 0 0
)

rolla=: 4 : 0
 9!:45 statea
 z=. x [EMAIL PROTECTED] y
 statea=: 9!:44 ''
 z
)

initb=: 3 : 0
 9!:1 seedb=: y
 stateb=: 9!:44 ''
 i. 0 0
)

rollb=: 4 : 0
 9!:45 stateb
 z=. x [EMAIL PROTECTED] y
 stateb=: 9!:44 ''
 z
)

The following results demonstrate that rolla and
rollb really are independent.  The first set have
them interleaved:

   inita 16807
   initb 314159
   10 rolla 1000
590 147 158 729 522 732 355 5 955 673
   10 rollb 1000
867 439 794 893 437 543 272 665 586 595
   10 rolla 1000
858 350 740 105 669 546 334 840 546 184
   10 rollb 1000
103 809 553 195 69 605 785 339 937 456
   
Non-interleaved execution gives the same generated
numbers:

   inita 16807
   10 rolla 1000
590 147 158 729 522 732 355 5 955 673
   10 rolla 1000
858 350 740 105 669 546 334 840 546 184
   
   initb 314159
   10 rollb 1000
867 439 794 893 437 543 272 665 586 595
   10 rollb 1000
103 809 553 195 69 605 785 339 937 456

p.s. I can imagine that for some purposes the seed
(a single 31-bit integer) may not be an adequate 
starting point.  In that case you can tweak the 
state directly.



----- Original Message -----
From: bill lam <[EMAIL PROTECTED]>
Date: Friday, July 14, 2006 9:56 pm
Subject: [Jprogramming] private random number generator

> Suppose there are 2 routines, each will initialize the seed and 
> call ?
> alternatively, because state of rng is global, what a routine will 
> get depend on
> the other routine or the cache left. There is a possibility that 
> the sequence
> got by a routine does not satisfy original statistical property of 
> randomness.
> suppose rng give 0 1 0 1 0 1 0 1 0 1 ..... for calling ?2 repeatedly
> then routine a get 0 0 0 0 0 ...
> while routine b get 1 1 1 1 1 ...
> originally it should be bi-modal and average 0.5, of course any 
> respectable rng
> will not generate this sequence, but it might illustrate the problem.
> 
> So, is it possible to make 2 independent instances of ? for 
> private use?


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

Reply via email to