[vox-tech] Re: random number in C
Jeff Newmiller
vox-tech@lists.lugod.org
Tue, 2 Apr 2002 23:22:07 -0800 (PST)
On Tue, 2 Apr 2002, eric nelson wrote:
> Not an expert on this, but I think the kernel adds entropy, from keypresses
> and other things considered 'random', so results are not entirely
> deterministic. You can look at the code in the random driver, random.c in
> /usr/src/linux/drivers/char for some background.
> After all, random is used to generate keys used in security, and those
> hackers are pretty smart, and repeatable random sequences would allow certain
> attacks.
random.c is part of the kernel.
random() and rand() are C library calls that produce pseudo-random
sequences.
The random driver may be used to obtain a seed for random() or rand(), or
it could be used to obtain random numbers on its own. You run a risk of
extracting all of the randomness from the system if you depend on random
for long random sequences, though, and a /dev/random that has run out of
entropy is a file that will block until that condition changes.
Having known psuedo-random sequences does allow you to "repeat"
monte-carlo simulations. To answer Peter, yes, rand() is supposed to be
deterministic for this very reason. I am puzzled by the same issue Ken is
puzzled by, though... failing to call srand() should always cause rand()
to yield the same pseudo-random sequence... it should never have yielded
variable results in the first place!
> On Tuesday 02 April 2002 06:26 pm, you wrote:
> > > Date: Tue, 2 Apr 2002 14:47:20 -0800
> > > [CODE SNIPPED]
> >
> > So this is when the program is seeded to /dev/random:
> > > p@satan% ./ising2-jfunc 4.0
> > > T: 4.0e+00 beta: 2.500e-01 trials: 1000 N: 10 M: 10 seed:
> > > 3497451914 Average Energy: -1.273893
> > > Average magnetization: 0.425220
> > > Average |magnetization|: 0.531100
> > > Average magnetic susceptibility: 34.746600
> >
> > And this is when the code is seeded to 1:
> > > T: 4.0e+00 beta: 2.500e-01 trials: 1000 N: 10 M: 10 seed:
> > > 3497451914 Average Energy: -1.326747
> > > Average magnetization: 0.495320
> > > Average |magnetization|: 0.495320
> > > Average magnetic susceptibility: 28.645040
> >
> > And you've established that if you run it repeatedly you keep getting the
> same thing:
> > > T: 4.0e+00 beta: 2.500e-01 trials: 1000 N: 10 M: 10 seed:
> > > 3497451914 Average Energy: -1.326747
> > > Average magnetization: 0.495320
> > > Average |magnetization|: 0.495320
> > > Average magnetic susceptibility: 28.645040
> >
> > BUT four hours earlier:
> > > Date: Tue, 2 Apr 2002 10:05:34 -0800
> >
> > This is when you seed it to /dev/random:
> > > T: 4.0e+00 beta: 2.500e-01 trials: 1000000
> > > N: 10 M: 10 seed: 208006379
> > > Average Energy: -1.057143
> > > Average magnetization: 0.002008
> > > Average |magnetization|: 0.251765
> > > Average magnetic susceptibility: 8.948655
> >
> > And this is when you seed it to 1:
> > > T: 4.0e+00 beta: 2.500e-01 trials: 1000000
> > > N: 10 M: 10 seed: 208006379
> > > Average Energy: -1.050182
> > > Average magnetization: 0.030723
> > > Average |magnetization|: 0.246092
> > > Average magnetic susceptibility: 8.692724
> >
> > Why did 4 hours of time change the results when you seed it to 1 ???
> > _______________________________________________
> > vox-tech mailing list
> > vox-tech@lists.lugod.org
> > http://lists.lugod.org/mailman/listinfo/vox-tech
> _______________________________________________
> vox-tech mailing list
> vox-tech@lists.lugod.org
> http://lists.lugod.org/mailman/listinfo/vox-tech
>
---------------------------------------------------------------------------
Jeff Newmiller The ..... ..... Go Live...
DCN:<jdnewmil@dcn.davis.ca.us> Basics: ##.#. ##.#. Live Go...
Live: OO#.. Dead: OO#.. Playing
Research Engineer (Solar/Batteries O.O#. #.O#. with
/Software/Embedded Controllers) .OO#. .OO#. rocks...2k
---------------------------------------------------------------------------