## NAME

`rand`

, `rand_r`

,
`srand`

, `srand_deterministic`

— bad pseudo-random number
generator

## SYNOPSIS

```
#include
<stdlib.h>
```

`void`

`srand`

(`unsigned
int seed`);

`void`

`srand_deterministic`

(`unsigned
int seed`);

`int`

`rand`

(`void`);

`int`

`rand_r`

(`unsigned
int *seed`);

## DESCRIPTION

To satisfy portable code,
`srand`

() may
be called to initialize the subsystem. In OpenBSD
the `seed` variable is ignored, and strong random number
results will be provided from
arc4random(3). In other systems, the
`seed` variable primes a simplistic deterministic
algorithm.

If the standardized behavior is required
`srand_deterministic`

()
can be substituted for `srand`

(), then subsequent
`rand`

() calls will return results using the
deterministic algorithm. The deterministic sequence algorithm changed a
number of times since original development, is underspecified, and should
not be relied upon to remain consistent between platforms and over time.

The
`rand`

()
function returns a result in the range of 0 to
`RAND_MAX`

. By default, this result comes from
arc4random(3). If
`srand_deterministic`

() was called, the result will be
computed using the deterministic algorithm.

The
`rand_r`

()
function is a thread-safe version of `rand`

(). Storage
for the seed must be provided through the `seed`
argument, and needs to have been initialized by the caller. It always
operates using the deterministic algorithm.

## SEE ALSO

## STANDARDS

The `rand`

() function conforms to
ANSI X3.159-1989
(“ANSI C89”).

The `rand_r`

() function conforms to
IEEE Std 1003.1-2008 (“POSIX.1”).

The `srand`

() function does not conform to
ANSI X3.159-1989 (“ANSI C89”),
intentionally.

The `srand_deterministic`

() function is an
OpenBSD extension.

## HISTORY

The functions `rand`

() and
`srand`

() first appeared in
Version 3 AT&T UNIX.