Next: Discrete Fourier Transform, Previous: Prime Numbers, Up: Mathematical Packages [Contents][Index]

A pseudo-random number generator is only as good as the tests it passes.
George Marsaglia of Florida State University developed a battery of
tests named *DIEHARD* (http://stat.fsu.edu/~geo/diehard.html).
`diehard.c` has a bug which the patch
http://groups.csail.mit.edu/mac/ftpdir/users/jaffer/diehard.c.pat corrects.

SLIB’s PRNG generates 8 bits at a time. With the degenerate seed
‘`0`’, the numbers generated pass DIEHARD; but when bits are
combined from sequential bytes, tests fail. With the seed
‘`http://swissnet.ai.mit.edu/~jaffer/SLIB.html`’, all of those
tests pass.

Next: Inexact Random Numbers, Previous: Random Numbers, Up: Random Numbers [Contents][Index]

`(require 'random)`

- Function:
**random***n state*¶ - Function:
**random***n*¶ -
`n`must be an exact positive integer.`random`

returns an exact integer between zero (inclusive) and`n`(exclusive). The values returned by`random`

are uniformly distributed from 0 to`n`.The optional argument

`state`must be of the type returned by`(seed->random-state)`

or`(make-random-state)`

. It defaults to the value of the variable`*random-state*`

. This object is used to maintain the state of the pseudo-random-number generator and is altered as a side effect of calls to`random`

.

- Variable:
***random-state***¶ Holds a data structure that encodes the internal state of the random-number generator that

`random`

uses by default. The nature of this data structure is implementation-dependent. It may be printed out and successfully read back in, but may or may not function correctly as a random-number state object in another implementation.

- Function:
**copy-random-state***state*¶ -
Returns a new copy of argument

`state`.

- Function:
**copy-random-state**¶ Returns a new copy of

`*random-state*`

.

- Function:
**seed->random-state***seed*¶ -
Returns a new object of type suitable for use as the value of the variable

`*random-state*`

or as a second argument to`random`

. The number or string`seed`is used to initialize the state. If`seed->random-state`

is called twice with arguments which are`equal?`

, then the returned data structures will be`equal?`

. Calling`seed->random-state`

with unequal arguments will nearly always return unequal states.

- Function:
**make-random-state**¶ - Function:
**make-random-state***obj*¶ Returns a new object of type suitable for use as the value of the variable

`*random-state*`

or as a second argument to`random`

. If the optional argument`obj`is given, it should be a printable Scheme object; the first 50 characters of its printed representation will be used as the seed. Otherwise the value of`*random-state*`

is used as the seed.

Previous: Exact Random Numbers, Up: Random Numbers [Contents][Index]

`(require 'random-inexact)`

- Function:
**random:uniform**¶ - Function:
**random:uniform***state*¶ Returns an uniformly distributed inexact real random number in the range between 0 and 1.

- Function:
**random:exp**¶ - Function:
**random:exp***state*¶ Returns an inexact real in an exponential distribution with mean 1. For an exponential distribution with mean

`u`use`(*`

.`u`(random:exp))

- Function:
**random:normal**¶ - Function:
**random:normal***state*¶ Returns an inexact real in a normal distribution with mean 0 and standard deviation 1. For a normal distribution with mean

`m`and standard deviation`d`use`(+`

.`m`(*`d`(random:normal)))

- Procedure:
**random:normal-vector!***vect*¶ - Procedure:
**random:normal-vector!***vect state*¶ Fills

`vect`with inexact real random numbers which are independent and standard normally distributed (i.e., with mean 0 and variance 1).

- Procedure:
**random:hollow-sphere!***vect*¶ - Procedure:
**random:hollow-sphere!***vect state*¶ Fills

`vect`with inexact real random numbers the sum of whose squares is equal to 1.0. Thinking of`vect`as coordinates in space of dimension n =`(vector-length`

, the coordinates are uniformly distributed over the surface of the unit n-shere.`vect`)

- Procedure:
**random:solid-sphere!***vect*¶ - Procedure:
**random:solid-sphere!***vect state*¶ Fills

`vect`with inexact real random numbers the sum of whose squares is less than 1.0. Thinking of`vect`as coordinates in space of dimension`n`=`(vector-length`

, the coordinates are uniformly distributed within the unit`vect`)`n`-shere. The sum of the squares of the numbers is returned.