"James J. Weinkam" <jjw@[EMAIL PROTECTED]
> wrote in message
news:Ro6oj.165$C61.91@[EMAIL PROTECTED]
> Charles Brenner wrote:
>> 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
>
> You are missing the point.
>
> It is true in the present instance that any non zero value less than
2*31 is a
> valid seed; but if you simply choose a new seed at random there is a
risk that
> you will simply be generating the same stream of random numbers you used
in a
> previous experiment shifted by a bit. This can lead to undesirable
> correlation between runs which can invalidate subsequent statistical
analysis.
>
> Saving {quad}RL at the end of a run and restoring it at the beginning of
the
> next is hardly a major housekeeping issue.
so, there's no real RANDOM in computing (as I've read somewhere in the old
days)


|