[fpc-pascal]Random generator

Jonas Maebe jonas at zeus.ugent.be
Sat Dec 6 19:31:39 CET 2003


On 6 dec 2003, at 19:16, jordi wrote:

> Sorry, there are a few things that I don't understand... and I am not 
> so
> good in mathematics... and I can't explain it in English quite well.
>
> The same seed generates the same random sequence... or not?

Yes.

> and why I can randomize as often as I want in the same program?

Randomize is simply a procedure, the compiler does not know it is 
special or so.

> A loop like this generates the same numbers:
> for loop := 1 to 100 do begin
>   randomize;
>   writeln (random (1000) +1);
> end;

You are using random/randomize wrong here. The correct way is

randomize;
for loop := 1 to 100 do begin
   writeln (random (1000) +1);
end;

Randomize initialises the random number generator based on the current 
system time. So if you call it multiple times in a short time period, 
you will get a similar (or even the same) randseed.

> How can I re-seed in the same program?

randomize;
org_seed := randseed;
for loop := 1 to 100 do begin
   writeln (random (1000) +1);
end;
randseed := org_seed;
for loop := 1 to 100 do begin
   writeln (random (1000) +1);
end;

Now you will get twice the same 100 numbers. Do not call randomize more 
than once during a program run, it will only make the numbers you get 
"less random".


Jonas





More information about the fpc-pascal mailing list