Documentation - C API
random.h File Reference

Random number generator. More...

#include "host.h"

Data Structures

struct  VlRand
 Random numbber generator state. More...

Functions

Setting and reading the state
void vl_rand_init (VlRand *self)
 Initialise random number generator.
void vl_rand_seed (VlRand *self, vl_uint32 s)
 Seed the state of the random number generator.
void vl_rand_seed_by_array (VlRand *self, vl_uint32 const key[], vl_size keySize)
 Seed the state of the random number generator by an array.
Generate random numbers
vl_uint64 vl_rand_uint64 (VlRand *self)
 Generate a random UINT64.
vl_int64 vl_rand_int63 (VlRand *self)
 Generate a random INT63.
vl_uint32 vl_rand_uint32 (VlRand *self)
 Generate a random UINT32.
vl_int32 vl_rand_int31 (VlRand *self)
 Generate a random INT31.
double vl_rand_real1 (VlRand *self)
 Generate a random number in [0,1].
double vl_rand_real2 (VlRand *self)
 Generate a random number in [0,1)
double vl_rand_real3 (VlRand *self)
 Generate a random number in (0,1)
double vl_rand_res53 (VlRand *self)
 Generate a random number in [0,1) with 53-bit resolution.
vl_uindex vl_rand_uindex (VlRand *self, vl_uindex range)
 Generate a random index in a given range.

Detailed Description

This module implements the popular Mersenne Twister algorithm (MATLAB random generator from version 7.4).

Overview

A random number generator can be initalized by

 VlRand rand ;
 vl_rand_init (&rand) ;

VlRand is a simple structure holding the state of the random number generator. The generator can be seeded by vl_rand_seed and vl_rand_seed_by_array. For intsance:

 vl_rand_seed (&rand, clock()) ;

The generator can be used to obtain random quantities of various types:

There is no need to explicitly destroy a VlRand instance.

[1] http://en.wikipedia.org/wiki/Mersenne_twister

Author:
Andrea Vedaldi

Function Documentation

void vl_rand_init ( VlRand self)
Parameters:
selfnumber generator.
vl_int32 vl_rand_int31 ( VlRand self) [inline]
Parameters:
selfrandom number generator.
Returns:
a random number in [0, 0x7fffffff].
vl_int64 vl_rand_int63 ( VlRand self) [inline]
Parameters:
selfrandom number generator.
Returns:
a random number in [0, 0x7fffffffffffffff].
double vl_rand_real1 ( VlRand self) [inline]
Parameters:
selfrandom number generator.
Returns:
a random number.
double vl_rand_real2 ( VlRand self) [inline]
Parameters:
selfrandom number generator.
Returns:
a random number.
double vl_rand_real3 ( VlRand self) [inline]
Parameters:
selfrandom number generator.
Returns:
a random number.
double vl_rand_res53 ( VlRand self) [inline]
Parameters:
selfrandom number generator.
Returns:
a random number.
void vl_rand_seed ( VlRand self,
vl_uint32  s 
)
Parameters:
selfrandom number generator.
sseed.
void vl_rand_seed_by_array ( VlRand self,
vl_uint32 const  key[],
vl_size  keySize 
)
Parameters:
selfrandom number generator.
keyarray of numbers.
keySizelength of the array.
vl_uindex vl_rand_uindex ( VlRand self,
vl_uindex  range 
) [inline]
Parameters:
selfrandom number generator.
rangerange.
Returns:
an index sampled uniformly at random in the interval [0, range - 1]
Remarks:
Currently, this function uses a simple algorithm that may yield slightly biased samples if range is not a power of two.
vl_uint32 vl_rand_uint32 ( VlRand self)
Parameters:
selfrandom number generator.
Returns:
a random number in [0, 0xffffffff].
vl_uint64 vl_rand_uint64 ( VlRand self) [inline]
Parameters:
selfrandom number generator.
Returns:
a random number in [0, 0xffffffffffffffff].