randomize/0 doesn't work (further comments)

[email protected]
Newsgroups gmane.comp.gnu.prolog.bugs
Message-ID <Pine.LNX.4.21.0208171827560.10126-100000@diamond.ansuz.sooke.bc.ca>
After sending the message below I took another look at the code and
realized that even with the absolute instead of the relative time, line
790 of machine.c re-seeds the random number generator with an integer in
the range 0..255; so there are only 256 possible seeds for a generator
that ought to be able to do much better than that.

I don't understand why line 790 exists at all; it looks to me like it
would be safe, and sensible, to delete that line entirely.  Another
possibility would be to replace the yucky hardcoded constant 256 with
RAND_MAX, so we don't lose more information than necessary by re-seeding
the generator.
-- 
Matthew Skala
[email protected]                    Embrace and defend.
http://ansuz.sooke.bc.ca/

---------- Forwarded message ----------
Date: Sat, 17 Aug 2002 17:55:15 -0400 (EDT)
From: [email protected]
To: [email protected]
Subject: randomize/0 doesn't work (fix included)

I have a program that calls randomize/0 in its initialization.  It usually
gets the same random seed, because although randomize/0 is documented as
using "a random value depending on the absolute time", it actually gets
its seed by calling M_Real_Time(), which is the number of milliseconds
since the process started.

If I compile my code and put randomize/0 in the initialization, then as
long as my system load stays reasonably low, the number of milliseconds
between process start and the randomize/0 call will be the same every
time, and so I get the same seed value every time.  That's not what I
want, nor what the documentation leads me to expect.

I suggest changing line 789 of src/EnginePL/machine.c from:

  M_Set_Seed(M_Real_Time());

to

  M_Set_Seed(M_Real_Time() + start_real_time);

That way it uses the current time, as documented.
-- 
Matthew Skala
[email protected]                    Embrace and defend.
http://ansuz.sooke.bc.ca/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.