|
Hopefully, this page is exactly what you are looking for, but if not, you can always find further assistance on Unix/Linux Forum!
RAND(3) Linux Programmer's Manual RAND(3)
NAME
rand, rand_r, srand - pseudo-random number generator
SYNOPSIS
#include <stdlib.h>
int rand(void);
int rand_r(unsigned int *seedp);
void srand(unsigned int seed);
DESCRIPTION
The rand() function returns a pseudo-random integer between 0 and
RAND_MAX.
The srand() function sets its argument as the seed for a new sequence
of pseudo-random integers to be returned by rand(). These sequences
are repeatable by calling srand() with the same seed value.
If no seed value is provided, the rand() function is automatically
seeded with a value of 1.
The function rand() is not reentrant or thread-safe, since it uses hid-
den state that is modified on each call. This might just be the seed
value to be used by the next call, or it might be something more elabo-
rate. In order to get reproducible behaviour in a threaded application,
this state must be made explicit. The function rand_r() is supplied
with a pointer to an unsigned int, to be used as state. This is a very
small amount of state, so this function will be a weak pseudo-random
generator. Try drand48_r(3) instead.
RETURN VALUE
The rand() and rand_r() functions return a value between 0 and
RAND_MAX. The srand() function returns no value.
EXAMPLE
POSIX 1003.1-2003 gives the following example of an implementation of
rand() and srand(), possibly useful when one needs the same sequence on
two different machines.
static unsigned long next = 1;
/* RAND_MAX assumed to be 32767 */
int myrand(void) {
next = next * 1103515245 + 12345;
return((unsigned)(next/65536) % 32768);
}
void mysrand(unsigned seed) {
next = seed;
}
NOTES
The versions of rand() and srand() in the Linux C Library use the same
random number generator as random() and srandom(), so the lower-order
bits should be as random as the higher-order bits. However, on older
rand() implementations, and on current implementations on different
systems, the lower-order bits are much less random than the higher-
order bits. Do not use this function in applications intended to be
portable when good randomness is needed.
In Numerical Recipes in C: The Art of Scientific Computing (William H.
Press, Brian P. Flannery, Saul A. Teukolsky, William T. Vetterling; New
York: Cambridge University Press, 1992 (2nd ed., p. 277)), the follow-
ing comments are made:
"If you want to generate a random integer between 1 and 10, you
should always do it by using high-order bits, as in
j = 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0)));
and never by anything resembling
j = 1 + (rand() % 10);
(which uses lower-order bits)."
Random-number generation is a complex topic. The Numerical Recipes in
C book (see reference above) provides an excellent discussion of prac-
tical random-number generation issues in Chapter 7 (Random Numbers).
For a more theoretical discussion which also covers many practical
issues in depth, please see Chapter 3 (Random Numbers) in Donald E.
Knuth's The Art of Computer Programming, volume 2 (Seminumerical Algo-
rithms), 2nd ed.; Reading, Massachusetts: Addison-Wesley Publishing
Company, 1981.
CONFORMING TO
The functions rand() and srand() conform to SVID 3, 4.3BSD, ISO 9899,
POSIX 1003.1-2003. The function rand_r() is from POSIX 1003.1-2003.
SEE ALSO
drand48(3), random(3)
2003-11-15 RAND(3)
Man(1) output converted with
man2html and wrapped by fishsponge
This page was generated on Tue Feb 13 02:21:16 GMT 2007
|
Your favourite pages:
No pages logged yet. Trying to save cookie... Top 10 most popular pages:
sqlite3 man page (5323 hits) (openSUSE 10.2)
svn man page (5173 hits) (FreeBSD 6.2)
adv_cap_autoneg man page (4865 hits) (Solaris 10 11_06)
CPAN man page (4602 hits) (Suse Linux 10.1)
ssh man page (4337 hits) (Suse Linux 10.1)
ssh-socks5-proxy-connect man page (2843 hits) (Solaris 10 11_06)
netcat man page (2689 hits) (Suse Linux 10.1)
pprosetup man page (2473 hits) (Solaris 10 11_06)
startproc man page (2456 hits) (Suse Linux 10.1)
signal man page (2395 hits) (Suse Linux 10.1)
|