Re: srand in c or c++ doesn't really Generate Random Numbers ?
On Jul 3, 10:04 am, Hari <pasalic.zahar...@gmail.com> wrote:
Chelong je napisao:
[...]
First: computers can not generate random numbers, instead they
generate pseudo random numbers (most people call them random
numbers).
That's not quite true. There are numerous sources of entrophy
on a modern machine, and depending on what the hardware
provides, the OS can usually generate truely random numbers.
Not necessarily very rapidly, however. (Measuring the time
between mouse clicks in nanoseconds, for example, and then
taking the low order bits, would be a good example.)
Unix based machines make this available in "/dev/random". Using
it as your random number generator is going to make your program
incredibly slow, but they usually calculate a bit ahead, so you
can read just a couple of bytes, and use that to seed the random
number generator.
Note too that you don't always want real random numbers. Makes
it awfully hard to reproduce errors for debugging:-). The usual
solution is to use pseudo-random numbers (like rand()), note the
seed which was used, and provide an option to specify the seed,
which you can use when you encounter a bug.
[...]
In your program everithing looks fine, on my compiler runs ok
(I got diferent numbers).
He said he only got the same numbers when the program was
invoked twice in the same second. Which is what one would
expect. In the absence of "/dev/random", I'll usually bung in a
number of odd values: the time in microseconds, the process id,
the IP or the MAP address of the machine, etc., depending on
what's available, and what the program is designed to do. (If
it's anything interactive, just time(NULL) is probably
sufficient. Since I'm usually counting on getting different
values from programs started by cron jobs at the same time on
different machines, however...)
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=A8=A6e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=A8=A6mard, 78210 St.-Cyr-l' cole, France, +33 (0)1 30 23 00 34