diff options
Diffstat (limited to 'contrib/lua-torch/torch7/lib/TH/THRandom.h')
-rw-r--r-- | contrib/lua-torch/torch7/lib/TH/THRandom.h | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/contrib/lua-torch/torch7/lib/TH/THRandom.h b/contrib/lua-torch/torch7/lib/TH/THRandom.h new file mode 100644 index 000000000..28a14c0d7 --- /dev/null +++ b/contrib/lua-torch/torch7/lib/TH/THRandom.h @@ -0,0 +1,81 @@ +#ifndef TH_RANDOM_INC +#define TH_RANDOM_INC + +#include "THGeneral.h" + +#define _MERSENNE_STATE_N 624 +#define _MERSENNE_STATE_M 397 +/* A THGenerator contains all the state required for a single random number stream */ +typedef struct THGenerator { + /* The initial seed. */ + unsigned long the_initial_seed; + int left; /* = 1; */ + int seeded; /* = 0; */ + unsigned long next; + unsigned long state[_MERSENNE_STATE_N]; /* the array for the state vector */ + /********************************/ + + /* For normal distribution */ + double normal_x; + double normal_y; + double normal_rho; + int normal_is_valid; /* = 0; */ +} THGenerator; + +#define torch_Generator "torch.Generator" + +/* Manipulate THGenerator objects */ +TH_API THGenerator * THGenerator_new(void); +TH_API THGenerator * THGenerator_copy(THGenerator *self, THGenerator *from); +TH_API void THGenerator_free(THGenerator *gen); + +/* Checks if given generator is valid */ +TH_API int THGenerator_isValid(THGenerator *_generator); + +/* Initializes the random number generator from /dev/urandom (or on Windows +platforms with the current time (granularity: seconds)) and returns the seed. */ +TH_API unsigned long THRandom_seed(THGenerator *_generator); + +/* Initializes the random number generator with the given long "the_seed_". */ +TH_API void THRandom_manualSeed(THGenerator *_generator, unsigned long the_seed_); + +/* Returns the starting seed used. */ +TH_API unsigned long THRandom_initialSeed(THGenerator *_generator); + +/* Generates a uniform 32 bits integer. */ +TH_API unsigned long THRandom_random(THGenerator *_generator); + +/* Generates a uniform random number on [0,1[. */ +TH_API double THRandom_uniform(THGenerator *_generator, double a, double b); + +/** Generates a random number from a normal distribution. + (With mean #mean# and standard deviation #stdv >= 0#). +*/ +TH_API double THRandom_normal(THGenerator *_generator, double mean, double stdv); + +/** Generates a random number from an exponential distribution. + The density is $p(x) = lambda * exp(-lambda * x)$, where + lambda is a positive number. +*/ +TH_API double THRandom_exponential(THGenerator *_generator, double lambda); + +/** Returns a random number from a Cauchy distribution. + The Cauchy density is $p(x) = sigma/(pi*(sigma^2 + (x-median)^2))$ +*/ +TH_API double THRandom_cauchy(THGenerator *_generator, double median, double sigma); + +/** Generates a random number from a log-normal distribution. + (#mean > 0# is the mean of the log-normal distribution + and #stdv# is its standard deviation). +*/ +TH_API double THRandom_logNormal(THGenerator *_generator, double mean, double stdv); + +/** Generates a random number from a geometric distribution. + It returns an integer #i#, where $p(i) = (1-p) * p^(i-1)$. + p must satisfy $0 < p < 1$. +*/ +TH_API int THRandom_geometric(THGenerator *_generator, double p); + +/* Returns true with probability $p$ and false with probability $1-p$ (p > 0). */ +TH_API int THRandom_bernoulli(THGenerator *_generator, double p); +#endif |