HPlogo HP-UX Reference Volume 4 of 5 > r

rand(3C)

» 

Technical documentation

Complete book in PDF

 » Table of Contents

 » Index

NAME

rand(), rand_r(), srand() — simple random-number generator

SYNOPSIS

#include <stdlib.h>

int rand(void);

int rand_r(unsigned int *seed);

void srand(unsigned int seed);

DESCRIPTION

rand() uses a multiplicative, congruential, random-number generator with period 232 that returns successive pseudo-random numbers in the range from 0 to 215-1.

srand() can be called at any time to reset the random-number generator to a random starting point. The generator is initially seeded with a value of 1.

rand_r() returns a random number at the address pointed to by the randval parameter. The seed parameter can be set at any time to start the random-number generator at an arbitrary point.

APPLICATION USAGE

Both rand() and rand_r() are thread-safe. The rand_r() interface has been provided to allow multiple threads to generate the same sequence of random numbers concurrently. These interfaces are not async-cancel-safe.

RETURN VALUE

If seed or randval is NULL, rand_r() returns 0. Otherwise, rand_r() returns a psuedo-random integer.

EXAMPLE

The following:

int x, y; srand(10); x = rand(); y = rand();

would produce the same results as:

int x, y, s = 10; x=rand_r(&s); y=rand_r(&s);

NOTE

The spectral properties of rand() leave a great deal to be desired. drand48() provides a much better, though more elaborate, random-number generator (see drand48(3C)).

WARNINGS

Users of rand_r() should note that rand_r() now conforms with POSIX.1c. The old prototype of rand_r() is supported for compatibility with existing DCE applications only.

STANDARDS CONFORMANCE

rand(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C

rand_r(): POSIX.1c

srand(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C

© Hewlett-Packard Development Company, L.P.