GSL is a library that provides many useful scientific functions, including random number generation, random number distributions, statistics, fast fourier transform, and root finding. The latest version is gsl-0.4.1 released January 1999. The source code is installed in /usr/dirt/src/gsl-0.4.1/, the library files (compiled on FreeBSD 2.2.8) are in /usr/dirt/lib/, and the header files are in /usr/dirt/include/.
On this web page, I've included links to the GSL main web page and the GSL manual, a list of available random number distributions, an example on how to use GSL in your own program, and some notes on how to re-build the library.
gaussian (sigma) | bivariate gaussian (sigma_x, sigma_y, rho, x, y) | exponential (mu) |
laplace (mu) | exponential power (mu, a) | cauchy (mu) |
rayleigh (sigma) | rayleigh tail (a, sigma) | symmetric levy (mu, a) |
gamma (a, b) | flat/uniform (a, b) | lognormal (zeta, sigma) |
chi-squared (mu) | F-distribution (nu1, nu2) | t-distribution (nu) |
beta (a, b) | logistic (mu) | pareto (a, b) |
spherical_2d (x, y) spherical_3d (x, y, z) | weibull (mu, a) | gumbel (a, b) |
Discrete
poisson (mu) | bernoulli (p) | binomial (p, n) |
negative binomial (p, n) | geometric (p) | hypergeometric (n1, n2, t) | logarithmic (p) |
#include "gsl_randist.h" int main (void) { double packet_size; long seed; gsl_rng *rng; // random number generator rng = gsl_rng_alloc (gsl_rng_rand48); // pick random number generator seed = time (NULL) * getpid(); gsl_rng_set (rng, seed); // set seed packet_size = gsl_ran_exponential (1500); // get a random number from // the exponential distribution gsl_rng_free (rng); // dealloc the rng } % gcc -L /usr/dirt/lib -lgslrandist -lgslrng -lgslerr -lgslspecfunc [..]Note -- If you want to use GSL with C++, include the gsl header file like this:
extern "C" { #include "gsl_randist.h" }
[.../gsl/]% ./configure [.../gsl/your favorite library/]% make [.../gsl/your favorite library/]% cp gsl_*.h /usr/dirt/include [.../gsl/your favorite library/]% cp lib*.a /usr/dirt/lib