Talk About Network



Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > Apl > Re: picking a n...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 8 of 12 Topic 941 of 1019
Post > Topic >>

Re: picking a new random seed

by Charles Brenner <cbrenner@[EMAIL PROTECTED] > Jan 29, 2008 at 09:37 PM

On Jan 27, 1:33 pm, "Curtis A. Jones" <curtis_jo...@[EMAIL PROTECTED]
> wrote:
> Charles,
> Simply constructing an integer from the system clock to use as the
> seed {quadRL} for the random number generator may give a less than
> ideal sequence.
>
> James J. Weinkam discusses this in this comp.lang.apl group under
> "Random Number Generation in IP Sharp APL" (29 Jun 2006
1917)http://groups.google.com/group/comp.lang.apl/browse_frm/thread/33c60d...
>
> Among the consequences of a poor choice of seed:
> "Moreover choosing a seed which is nor relatively prime to the modulus
> causes the generator to produce a subsequence which is not of maximum
> length."
>
> One recommendation he makes:
> "...saving the value of the seed at the end or each run and using that
> value to seed the generator at the start of the next run."

Yes, I thought of that but would rather not decide on all the
housekeeping issues.

> I imagine you know this and have a function that selects only "valid
> values for {quadRL}" from the clock.  Would you share it?

That's quite easy. The random number generation algorithm is
multiply by 5*7
reduce modulo (2*31)-1.
This algorithm generates every possible value before it repeats (I
checked the cycle length, which didn't take very long. In formal
language, the modulus is a prime and 5*7 is a primitive root, meaning
a number whose powers include every modulus class except 0. The fact
is that every prime does have primitive roots, so once you realize
that (2*31)-1 is a prime it follows that unless the implementor
blundered remarkably, the chosen multiplier must be a primitive root
and the generated numbers must be the full cycle. There was really no
need to check.)

That is, all numbers
0 < n < 2*31
are in the cycle, so start with any one of them. For example

1. Hash the system clock or whatever to a number. To ensure a valid
and efficient []RL
2. Reduce that number modulus (2*31)-2
3. Add 1.

Charles




 12 Posts in Topic:
picking a new random seed
Charles Brenner <cbren  2008-01-26 17:01:18 
Re: picking a new random seed
Sam Sirlin <swsirlin@[  2008-01-26 17:47:00 
Re: picking a new random seed
"Curtis A. Jones&quo  2008-01-27 13:33:38 
Re: picking a new random seed
Phil Last <phil.last@[  2008-01-27 15:01:01 
Re: picking a new random seed
"Curtis A. Jones&quo  2008-01-28 09:09:42 
Re: picking a new random seed
Phil Last <phil.last@[  2008-01-28 10:08:42 
Re: picking a new random seed
rbe <bernecky@[EMAIL P  2008-01-29 06:15:33 
Re: picking a new random seed
Charles Brenner <cbren  2008-01-29 21:37:30 
Re: picking a new random seed
"James J. Weinkam&qu  2008-01-30 21:57:05 
Re: picking a new random seed
"jk" <*axy*@  2008-01-30 23:06:17 
Re: picking a new random seed
Jane Sullivan <jane@[E  2008-01-31 07:13:48 
Re: picking a new random seed
Charles Brenner <cbren  2008-02-03 13:59:35 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Fri May 16 10:56:14 CDT 2008.