Reference

Random Number Generators

typedef struct rng *RNG

Defines a random number generator.


void rng_seed(RNG rng, unsigned long seed)

Seed the generator.

Parameters
  • rng: The random number generator to seed.
  • seed: The seed value.


unsigned long rng_next(RNG rng)

Get the next unsigned long random number.

Parameters
  • rng: The random number generator.


RNG rng_std_create(MEM_SCOPE mem)

Create a standard system random number generator.

Return
A standard system random number generator.
Remark
This generator returns 31bit numbers.
Parameters
  • mem: A memory scope to own the memory.


RNG rng_xor_create(MEM_SCOPE mem)

Create an XOR random number generator.

Return
An XOR random number generator.
Remark
This generator returns 64bit numbers.
Parameters
  • mem: A memory scope to own the memory.


Random Numbers

typedef struct random *RANDOM

A random number generator.


RANDOM rnd_create(MEM_SCOPE mem, RNG rng)

Create a random number generator.

Return
A random number generator.
Remark
The generator is seeded with the CPU timestamp counter, the number of cycles since the last reset, so may be taken as ready to use for stochastic processing.
Parameters
  • mem: A memory scope to own the memory.
  • rng: The specific generator to use for random number generation.


void rnd_seed(RANDOM rnd, unsigned long seed)

Seed the random number generator to a known seed.

Parameters
  • rnd: The random number generator.
  • seed: The seed value.


unsigned int rnd_int(RANDOM rnd)

Generate a random integer between the range 0 and MAX_UINT

Return
A random number.
Parameters
  • rnd: The random number generator.


double rnd_real(RANDOM rnd)

Generate a random floating point number between the range 0 and 1 (closed).

Return
A random number.
Remark
The generated number is in the range [0,1.0), IE the value 1.0 is never returned, but the value immediately below could be.
Parameters
  • rnd: The random number generator.


int rnd_bool(RANDOM rnd)

Generate a random boolean value, TRUE or FALSE.

Return
TRUE or FALSE, wit equal probability.
Parameters
  • rnd: The random number generator.


unsigned int rnd_scaled_int(RANDOM rnd, int min, int max)

Generate a random integer number between the given range (open/closed).

Return
A random number.
Remark
The generated number is in the range [min, max), IE the max value is never returned, but the value immediately below could be.
Parameters
  • rnd: The random number generator.
  • min: The minimum value to generate.
  • max: The maximum value to generate (see remark).


double rnd_scaled_real(RANDOM rnd, double min, double max)

Generate a random floating point number between the given range (open/closed).

Return
A random number.
Remark
The generated number is in the range [min, max), IE the max value is never returned, but the value immediately below could be.
Parameters
  • rnd: The random number generator.
  • min: The minimum value to generate.
  • max: The maximum value to generate (see remark).


Hashing

unsigned long hash_simple(const void *key, unsigned int len, unsigned long seed)

Hash an arbitrary block of data using a simple hash.

Return
A hash value.
Remark
The seed is used to provide additional security.
Parameters
  • key: The key for the hash.
  • len: The length of the data in bytes.
  • seed: A seed for the hash.