[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
---------------------------------------------------------------------------