[fpc-pascal] Re: Random numbers

Alain Michaud Alain.Michaud at nrc-cnrc.gc.ca
Mon Mar 6 20:38:33 CET 2006


Hi,

  I am not a mathematician myself, but I predict that unless you make
extensive tests over a very long period of time  you will never find any
corelations!



On Mon, 2006-03-06 at 13:39 +0100, Jonas Maebe wrote:
> On 6 mrt 2006, at 13:37, Antal wrote:
> 
> >> The Mersenne Twister Free Pascal uses is one of the best PRNGs known
> >> today, it just has to be used the right way. But calling it from
> >> several threads and "randomly" overwriting its state array is
> >> definitely not the right way to use it.
> > I'm disappointed, because I compiled the following program (on linux):
> > rnd.pp
> > begin
> > Randomize;
> > writeln(random(394));
> > end.
> >
> > and I ran it for 11 times, and the results are rather strange:
> > 310.
> > 198
> > 344
> > 322*
> > 322*
> > 317-
> > 317-
> > 192
> > 336.
> > 382.
> > 339.
> > (upon noting the dups I had to re-run again twice, getting:)
> > 120
> > 297.
> 
> There is nothing strange about this. Randomize initialises randseed  
> based on the system clock value expressed in seconds. So if you run  
> it twice in the same second, you will get the same number.
> 
> > so, I've got two times a repetition, though I only re-ran the program.
> > (noted with * and - )
> > Then I made a new series of random generating:
> >
> > 297.
> > 120
> > 310.
> > 382.
> > 336.
> > 192
> > 317
> > 322
> > 344
> > 198
> > 339.
> >
> > I only have two problems with these random numbers:
> > Firstly, I can notice a repetition of some "random" numbers (noted  
> > with ".")
> > Then also 70% of them are 3xx
> > I learnt about random numbers, that they do not behave by this way.
> 
> You are not generating a series of random numbers based on the  
> Mersenne Twister here, because you only generate one random number  
> per program run. If you take all these values "together" as  
> supposedly belonging to a "series of random numbers", then the result  
> is that you are using a different "random" generator, where the next  
> "random" number is generated based on the next clock/time value as  
> opposed to the previously generated random number.
> 
> To test it properly, you should change your test program into this:
> 
> var
>    i: longint;
> begin
> Randomize;
>   for i := 1 to 20 do
>    writeln(random(394));
> end.
> 
> And then you have to compare the random numbers generated in one such  
> a program run, not between different runs.
> 
> 
> Jonas
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal




More information about the fpc-pascal mailing list