1# This file was automatically generated by SWIG (http://www.swig.org).
2# Version 4.0.1
3#
4# Do not make changes to this file unless you know what you are doing--modify
5# the SWIG interface file instead.
6
7package Math::GSL::RNG;
8use base qw(Exporter);
9use base qw(DynaLoader);
10package Math::GSL::RNGc;
11bootstrap Math::GSL::RNG;
12package Math::GSL::RNG;
13@EXPORT = qw();
14
15# ---------- BASE METHODS -------------
16
17package Math::GSL::RNG;
18
19sub TIEHASH {
20    my ($classname,$obj) = @_;
21    return bless $obj, $classname;
22}
23
24sub CLEAR { }
25
26sub FIRSTKEY { }
27
28sub NEXTKEY { }
29
30sub FETCH {
31    my ($self,$field) = @_;
32    my $member_func = "swig_${field}_get";
33    $self->$member_func();
34}
35
36sub STORE {
37    my ($self,$field,$newval) = @_;
38    my $member_func = "swig_${field}_set";
39    $self->$member_func($newval);
40}
41
42sub this {
43    my $ptr = shift;
44    return tied(%$ptr);
45}
46
47
48# ------- FUNCTION WRAPPERS --------
49
50package Math::GSL::RNG;
51
52*gsl_error = *Math::GSL::RNGc::gsl_error;
53*gsl_stream_printf = *Math::GSL::RNGc::gsl_stream_printf;
54*gsl_strerror = *Math::GSL::RNGc::gsl_strerror;
55*gsl_set_error_handler = *Math::GSL::RNGc::gsl_set_error_handler;
56*gsl_set_error_handler_off = *Math::GSL::RNGc::gsl_set_error_handler_off;
57*gsl_set_stream_handler = *Math::GSL::RNGc::gsl_set_stream_handler;
58*gsl_set_stream = *Math::GSL::RNGc::gsl_set_stream;
59*gsl_rng_types_setup = *Math::GSL::RNGc::gsl_rng_types_setup;
60*gsl_rng_alloc = *Math::GSL::RNGc::gsl_rng_alloc;
61*gsl_rng_memcpy = *Math::GSL::RNGc::gsl_rng_memcpy;
62*gsl_rng_clone = *Math::GSL::RNGc::gsl_rng_clone;
63*gsl_rng_free = *Math::GSL::RNGc::gsl_rng_free;
64*gsl_rng_set = *Math::GSL::RNGc::gsl_rng_set;
65*gsl_rng_max = *Math::GSL::RNGc::gsl_rng_max;
66*gsl_rng_min = *Math::GSL::RNGc::gsl_rng_min;
67*gsl_rng_name = *Math::GSL::RNGc::gsl_rng_name;
68*gsl_rng_fread = *Math::GSL::RNGc::gsl_rng_fread;
69*gsl_rng_fwrite = *Math::GSL::RNGc::gsl_rng_fwrite;
70*gsl_rng_size = *Math::GSL::RNGc::gsl_rng_size;
71*gsl_rng_state = *Math::GSL::RNGc::gsl_rng_state;
72*gsl_rng_print_state = *Math::GSL::RNGc::gsl_rng_print_state;
73*gsl_rng_env_setup = *Math::GSL::RNGc::gsl_rng_env_setup;
74*gsl_rng_get = *Math::GSL::RNGc::gsl_rng_get;
75*gsl_rng_uniform = *Math::GSL::RNGc::gsl_rng_uniform;
76*gsl_rng_uniform_pos = *Math::GSL::RNGc::gsl_rng_uniform_pos;
77*gsl_rng_uniform_int = *Math::GSL::RNGc::gsl_rng_uniform_int;
78
79############# Class : Math::GSL::RNG::gsl_rng_type ##############
80
81package Math::GSL::RNG::gsl_rng_type;
82use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
83@ISA = qw( Math::GSL::RNG );
84%OWNER = ();
85%ITERATORS = ();
86*swig_name_get = *Math::GSL::RNGc::gsl_rng_type_name_get;
87*swig_name_set = *Math::GSL::RNGc::gsl_rng_type_name_set;
88*swig_max_get = *Math::GSL::RNGc::gsl_rng_type_max_get;
89*swig_max_set = *Math::GSL::RNGc::gsl_rng_type_max_set;
90*swig_min_get = *Math::GSL::RNGc::gsl_rng_type_min_get;
91*swig_min_set = *Math::GSL::RNGc::gsl_rng_type_min_set;
92*swig_size_get = *Math::GSL::RNGc::gsl_rng_type_size_get;
93*swig_size_set = *Math::GSL::RNGc::gsl_rng_type_size_set;
94*swig_set_get = *Math::GSL::RNGc::gsl_rng_type_set_get;
95*swig_set_set = *Math::GSL::RNGc::gsl_rng_type_set_set;
96*swig_get_get = *Math::GSL::RNGc::gsl_rng_type_get_get;
97*swig_get_set = *Math::GSL::RNGc::gsl_rng_type_get_set;
98*swig_get_double_get = *Math::GSL::RNGc::gsl_rng_type_get_double_get;
99*swig_get_double_set = *Math::GSL::RNGc::gsl_rng_type_get_double_set;
100sub new {
101    my $pkg = shift;
102    my $self = Math::GSL::RNGc::new_gsl_rng_type(@_);
103    bless $self, $pkg if defined($self);
104}
105
106sub DESTROY {
107    return unless $_[0]->isa('HASH');
108    my $self = tied(%{$_[0]});
109    return unless defined $self;
110    delete $ITERATORS{$self};
111    if (exists $OWNER{$self}) {
112        Math::GSL::RNGc::delete_gsl_rng_type($self);
113        delete $OWNER{$self};
114    }
115}
116
117sub DISOWN {
118    my $self = shift;
119    my $ptr = tied(%$self);
120    delete $OWNER{$ptr};
121}
122
123sub ACQUIRE {
124    my $self = shift;
125    my $ptr = tied(%$self);
126    $OWNER{$ptr} = 1;
127}
128
129
130############# Class : Math::GSL::RNG::gsl_rng ##############
131
132package Math::GSL::RNG::gsl_rng;
133use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
134@ISA = qw( Math::GSL::RNG );
135%OWNER = ();
136%ITERATORS = ();
137*swig_type_get = *Math::GSL::RNGc::gsl_rng_type_get;
138*swig_type_set = *Math::GSL::RNGc::gsl_rng_type_set;
139*swig_state_get = *Math::GSL::RNGc::gsl_rng_state_get;
140*swig_state_set = *Math::GSL::RNGc::gsl_rng_state_set;
141sub new {
142    my $pkg = shift;
143    my $self = Math::GSL::RNGc::new_gsl_rng(@_);
144    bless $self, $pkg if defined($self);
145}
146
147sub DESTROY {
148    return unless $_[0]->isa('HASH');
149    my $self = tied(%{$_[0]});
150    return unless defined $self;
151    delete $ITERATORS{$self};
152    if (exists $OWNER{$self}) {
153        Math::GSL::RNGc::delete_gsl_rng($self);
154        delete $OWNER{$self};
155    }
156}
157
158sub DISOWN {
159    my $self = shift;
160    my $ptr = tied(%$self);
161    delete $OWNER{$ptr};
162}
163
164sub ACQUIRE {
165    my $self = shift;
166    my $ptr = tied(%$self);
167    $OWNER{$ptr} = 1;
168}
169
170
171# ------- VARIABLE STUBS --------
172
173package Math::GSL::RNG;
174
175*GSL_VERSION = *Math::GSL::RNGc::GSL_VERSION;
176*GSL_MAJOR_VERSION = *Math::GSL::RNGc::GSL_MAJOR_VERSION;
177*GSL_MINOR_VERSION = *Math::GSL::RNGc::GSL_MINOR_VERSION;
178*GSL_POSZERO = *Math::GSL::RNGc::GSL_POSZERO;
179*GSL_NEGZERO = *Math::GSL::RNGc::GSL_NEGZERO;
180*GSL_SUCCESS = *Math::GSL::RNGc::GSL_SUCCESS;
181*GSL_FAILURE = *Math::GSL::RNGc::GSL_FAILURE;
182*GSL_CONTINUE = *Math::GSL::RNGc::GSL_CONTINUE;
183*GSL_EDOM = *Math::GSL::RNGc::GSL_EDOM;
184*GSL_ERANGE = *Math::GSL::RNGc::GSL_ERANGE;
185*GSL_EFAULT = *Math::GSL::RNGc::GSL_EFAULT;
186*GSL_EINVAL = *Math::GSL::RNGc::GSL_EINVAL;
187*GSL_EFAILED = *Math::GSL::RNGc::GSL_EFAILED;
188*GSL_EFACTOR = *Math::GSL::RNGc::GSL_EFACTOR;
189*GSL_ESANITY = *Math::GSL::RNGc::GSL_ESANITY;
190*GSL_ENOMEM = *Math::GSL::RNGc::GSL_ENOMEM;
191*GSL_EBADFUNC = *Math::GSL::RNGc::GSL_EBADFUNC;
192*GSL_ERUNAWAY = *Math::GSL::RNGc::GSL_ERUNAWAY;
193*GSL_EMAXITER = *Math::GSL::RNGc::GSL_EMAXITER;
194*GSL_EZERODIV = *Math::GSL::RNGc::GSL_EZERODIV;
195*GSL_EBADTOL = *Math::GSL::RNGc::GSL_EBADTOL;
196*GSL_ETOL = *Math::GSL::RNGc::GSL_ETOL;
197*GSL_EUNDRFLW = *Math::GSL::RNGc::GSL_EUNDRFLW;
198*GSL_EOVRFLW = *Math::GSL::RNGc::GSL_EOVRFLW;
199*GSL_ELOSS = *Math::GSL::RNGc::GSL_ELOSS;
200*GSL_EROUND = *Math::GSL::RNGc::GSL_EROUND;
201*GSL_EBADLEN = *Math::GSL::RNGc::GSL_EBADLEN;
202*GSL_ENOTSQR = *Math::GSL::RNGc::GSL_ENOTSQR;
203*GSL_ESING = *Math::GSL::RNGc::GSL_ESING;
204*GSL_EDIVERGE = *Math::GSL::RNGc::GSL_EDIVERGE;
205*GSL_EUNSUP = *Math::GSL::RNGc::GSL_EUNSUP;
206*GSL_EUNIMPL = *Math::GSL::RNGc::GSL_EUNIMPL;
207*GSL_ECACHE = *Math::GSL::RNGc::GSL_ECACHE;
208*GSL_ETABLE = *Math::GSL::RNGc::GSL_ETABLE;
209*GSL_ENOPROG = *Math::GSL::RNGc::GSL_ENOPROG;
210*GSL_ENOPROGJ = *Math::GSL::RNGc::GSL_ENOPROGJ;
211*GSL_ETOLF = *Math::GSL::RNGc::GSL_ETOLF;
212*GSL_ETOLX = *Math::GSL::RNGc::GSL_ETOLX;
213*GSL_ETOLG = *Math::GSL::RNGc::GSL_ETOLG;
214*GSL_EOF = *Math::GSL::RNGc::GSL_EOF;
215
216my %__gsl_rng_borosh13_hash;
217tie %__gsl_rng_borosh13_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_borosh13;
218$gsl_rng_borosh13= \%__gsl_rng_borosh13_hash;
219bless $gsl_rng_borosh13, Math::GSL::RNG::gsl_rng_type;
220
221my %__gsl_rng_coveyou_hash;
222tie %__gsl_rng_coveyou_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_coveyou;
223$gsl_rng_coveyou= \%__gsl_rng_coveyou_hash;
224bless $gsl_rng_coveyou, Math::GSL::RNG::gsl_rng_type;
225
226my %__gsl_rng_cmrg_hash;
227tie %__gsl_rng_cmrg_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_cmrg;
228$gsl_rng_cmrg= \%__gsl_rng_cmrg_hash;
229bless $gsl_rng_cmrg, Math::GSL::RNG::gsl_rng_type;
230
231my %__gsl_rng_fishman18_hash;
232tie %__gsl_rng_fishman18_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_fishman18;
233$gsl_rng_fishman18= \%__gsl_rng_fishman18_hash;
234bless $gsl_rng_fishman18, Math::GSL::RNG::gsl_rng_type;
235
236my %__gsl_rng_fishman20_hash;
237tie %__gsl_rng_fishman20_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_fishman20;
238$gsl_rng_fishman20= \%__gsl_rng_fishman20_hash;
239bless $gsl_rng_fishman20, Math::GSL::RNG::gsl_rng_type;
240
241my %__gsl_rng_fishman2x_hash;
242tie %__gsl_rng_fishman2x_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_fishman2x;
243$gsl_rng_fishman2x= \%__gsl_rng_fishman2x_hash;
244bless $gsl_rng_fishman2x, Math::GSL::RNG::gsl_rng_type;
245
246my %__gsl_rng_gfsr4_hash;
247tie %__gsl_rng_gfsr4_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_gfsr4;
248$gsl_rng_gfsr4= \%__gsl_rng_gfsr4_hash;
249bless $gsl_rng_gfsr4, Math::GSL::RNG::gsl_rng_type;
250
251my %__gsl_rng_knuthran_hash;
252tie %__gsl_rng_knuthran_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_knuthran;
253$gsl_rng_knuthran= \%__gsl_rng_knuthran_hash;
254bless $gsl_rng_knuthran, Math::GSL::RNG::gsl_rng_type;
255
256my %__gsl_rng_knuthran2_hash;
257tie %__gsl_rng_knuthran2_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_knuthran2;
258$gsl_rng_knuthran2= \%__gsl_rng_knuthran2_hash;
259bless $gsl_rng_knuthran2, Math::GSL::RNG::gsl_rng_type;
260
261my %__gsl_rng_knuthran2002_hash;
262tie %__gsl_rng_knuthran2002_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_knuthran2002;
263$gsl_rng_knuthran2002= \%__gsl_rng_knuthran2002_hash;
264bless $gsl_rng_knuthran2002, Math::GSL::RNG::gsl_rng_type;
265
266my %__gsl_rng_lecuyer21_hash;
267tie %__gsl_rng_lecuyer21_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_lecuyer21;
268$gsl_rng_lecuyer21= \%__gsl_rng_lecuyer21_hash;
269bless $gsl_rng_lecuyer21, Math::GSL::RNG::gsl_rng_type;
270
271my %__gsl_rng_minstd_hash;
272tie %__gsl_rng_minstd_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_minstd;
273$gsl_rng_minstd= \%__gsl_rng_minstd_hash;
274bless $gsl_rng_minstd, Math::GSL::RNG::gsl_rng_type;
275
276my %__gsl_rng_mrg_hash;
277tie %__gsl_rng_mrg_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_mrg;
278$gsl_rng_mrg= \%__gsl_rng_mrg_hash;
279bless $gsl_rng_mrg, Math::GSL::RNG::gsl_rng_type;
280
281my %__gsl_rng_mt19937_hash;
282tie %__gsl_rng_mt19937_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_mt19937;
283$gsl_rng_mt19937= \%__gsl_rng_mt19937_hash;
284bless $gsl_rng_mt19937, Math::GSL::RNG::gsl_rng_type;
285
286my %__gsl_rng_mt19937_1999_hash;
287tie %__gsl_rng_mt19937_1999_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_mt19937_1999;
288$gsl_rng_mt19937_1999= \%__gsl_rng_mt19937_1999_hash;
289bless $gsl_rng_mt19937_1999, Math::GSL::RNG::gsl_rng_type;
290
291my %__gsl_rng_mt19937_1998_hash;
292tie %__gsl_rng_mt19937_1998_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_mt19937_1998;
293$gsl_rng_mt19937_1998= \%__gsl_rng_mt19937_1998_hash;
294bless $gsl_rng_mt19937_1998, Math::GSL::RNG::gsl_rng_type;
295
296my %__gsl_rng_r250_hash;
297tie %__gsl_rng_r250_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_r250;
298$gsl_rng_r250= \%__gsl_rng_r250_hash;
299bless $gsl_rng_r250, Math::GSL::RNG::gsl_rng_type;
300
301my %__gsl_rng_ran0_hash;
302tie %__gsl_rng_ran0_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_ran0;
303$gsl_rng_ran0= \%__gsl_rng_ran0_hash;
304bless $gsl_rng_ran0, Math::GSL::RNG::gsl_rng_type;
305
306my %__gsl_rng_ran1_hash;
307tie %__gsl_rng_ran1_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_ran1;
308$gsl_rng_ran1= \%__gsl_rng_ran1_hash;
309bless $gsl_rng_ran1, Math::GSL::RNG::gsl_rng_type;
310
311my %__gsl_rng_ran2_hash;
312tie %__gsl_rng_ran2_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_ran2;
313$gsl_rng_ran2= \%__gsl_rng_ran2_hash;
314bless $gsl_rng_ran2, Math::GSL::RNG::gsl_rng_type;
315
316my %__gsl_rng_ran3_hash;
317tie %__gsl_rng_ran3_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_ran3;
318$gsl_rng_ran3= \%__gsl_rng_ran3_hash;
319bless $gsl_rng_ran3, Math::GSL::RNG::gsl_rng_type;
320
321my %__gsl_rng_rand_hash;
322tie %__gsl_rng_rand_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_rand;
323$gsl_rng_rand= \%__gsl_rng_rand_hash;
324bless $gsl_rng_rand, Math::GSL::RNG::gsl_rng_type;
325
326my %__gsl_rng_rand48_hash;
327tie %__gsl_rng_rand48_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_rand48;
328$gsl_rng_rand48= \%__gsl_rng_rand48_hash;
329bless $gsl_rng_rand48, Math::GSL::RNG::gsl_rng_type;
330
331my %__gsl_rng_random128_bsd_hash;
332tie %__gsl_rng_random128_bsd_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_random128_bsd;
333$gsl_rng_random128_bsd= \%__gsl_rng_random128_bsd_hash;
334bless $gsl_rng_random128_bsd, Math::GSL::RNG::gsl_rng_type;
335
336my %__gsl_rng_random128_glibc2_hash;
337tie %__gsl_rng_random128_glibc2_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_random128_glibc2;
338$gsl_rng_random128_glibc2= \%__gsl_rng_random128_glibc2_hash;
339bless $gsl_rng_random128_glibc2, Math::GSL::RNG::gsl_rng_type;
340
341my %__gsl_rng_random128_libc5_hash;
342tie %__gsl_rng_random128_libc5_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_random128_libc5;
343$gsl_rng_random128_libc5= \%__gsl_rng_random128_libc5_hash;
344bless $gsl_rng_random128_libc5, Math::GSL::RNG::gsl_rng_type;
345
346my %__gsl_rng_random256_bsd_hash;
347tie %__gsl_rng_random256_bsd_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_random256_bsd;
348$gsl_rng_random256_bsd= \%__gsl_rng_random256_bsd_hash;
349bless $gsl_rng_random256_bsd, Math::GSL::RNG::gsl_rng_type;
350
351my %__gsl_rng_random256_glibc2_hash;
352tie %__gsl_rng_random256_glibc2_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_random256_glibc2;
353$gsl_rng_random256_glibc2= \%__gsl_rng_random256_glibc2_hash;
354bless $gsl_rng_random256_glibc2, Math::GSL::RNG::gsl_rng_type;
355
356my %__gsl_rng_random256_libc5_hash;
357tie %__gsl_rng_random256_libc5_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_random256_libc5;
358$gsl_rng_random256_libc5= \%__gsl_rng_random256_libc5_hash;
359bless $gsl_rng_random256_libc5, Math::GSL::RNG::gsl_rng_type;
360
361my %__gsl_rng_random32_bsd_hash;
362tie %__gsl_rng_random32_bsd_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_random32_bsd;
363$gsl_rng_random32_bsd= \%__gsl_rng_random32_bsd_hash;
364bless $gsl_rng_random32_bsd, Math::GSL::RNG::gsl_rng_type;
365
366my %__gsl_rng_random32_glibc2_hash;
367tie %__gsl_rng_random32_glibc2_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_random32_glibc2;
368$gsl_rng_random32_glibc2= \%__gsl_rng_random32_glibc2_hash;
369bless $gsl_rng_random32_glibc2, Math::GSL::RNG::gsl_rng_type;
370
371my %__gsl_rng_random32_libc5_hash;
372tie %__gsl_rng_random32_libc5_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_random32_libc5;
373$gsl_rng_random32_libc5= \%__gsl_rng_random32_libc5_hash;
374bless $gsl_rng_random32_libc5, Math::GSL::RNG::gsl_rng_type;
375
376my %__gsl_rng_random64_bsd_hash;
377tie %__gsl_rng_random64_bsd_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_random64_bsd;
378$gsl_rng_random64_bsd= \%__gsl_rng_random64_bsd_hash;
379bless $gsl_rng_random64_bsd, Math::GSL::RNG::gsl_rng_type;
380
381my %__gsl_rng_random64_glibc2_hash;
382tie %__gsl_rng_random64_glibc2_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_random64_glibc2;
383$gsl_rng_random64_glibc2= \%__gsl_rng_random64_glibc2_hash;
384bless $gsl_rng_random64_glibc2, Math::GSL::RNG::gsl_rng_type;
385
386my %__gsl_rng_random64_libc5_hash;
387tie %__gsl_rng_random64_libc5_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_random64_libc5;
388$gsl_rng_random64_libc5= \%__gsl_rng_random64_libc5_hash;
389bless $gsl_rng_random64_libc5, Math::GSL::RNG::gsl_rng_type;
390
391my %__gsl_rng_random8_bsd_hash;
392tie %__gsl_rng_random8_bsd_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_random8_bsd;
393$gsl_rng_random8_bsd= \%__gsl_rng_random8_bsd_hash;
394bless $gsl_rng_random8_bsd, Math::GSL::RNG::gsl_rng_type;
395
396my %__gsl_rng_random8_glibc2_hash;
397tie %__gsl_rng_random8_glibc2_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_random8_glibc2;
398$gsl_rng_random8_glibc2= \%__gsl_rng_random8_glibc2_hash;
399bless $gsl_rng_random8_glibc2, Math::GSL::RNG::gsl_rng_type;
400
401my %__gsl_rng_random8_libc5_hash;
402tie %__gsl_rng_random8_libc5_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_random8_libc5;
403$gsl_rng_random8_libc5= \%__gsl_rng_random8_libc5_hash;
404bless $gsl_rng_random8_libc5, Math::GSL::RNG::gsl_rng_type;
405
406my %__gsl_rng_random_bsd_hash;
407tie %__gsl_rng_random_bsd_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_random_bsd;
408$gsl_rng_random_bsd= \%__gsl_rng_random_bsd_hash;
409bless $gsl_rng_random_bsd, Math::GSL::RNG::gsl_rng_type;
410
411my %__gsl_rng_random_glibc2_hash;
412tie %__gsl_rng_random_glibc2_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_random_glibc2;
413$gsl_rng_random_glibc2= \%__gsl_rng_random_glibc2_hash;
414bless $gsl_rng_random_glibc2, Math::GSL::RNG::gsl_rng_type;
415
416my %__gsl_rng_random_libc5_hash;
417tie %__gsl_rng_random_libc5_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_random_libc5;
418$gsl_rng_random_libc5= \%__gsl_rng_random_libc5_hash;
419bless $gsl_rng_random_libc5, Math::GSL::RNG::gsl_rng_type;
420
421my %__gsl_rng_randu_hash;
422tie %__gsl_rng_randu_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_randu;
423$gsl_rng_randu= \%__gsl_rng_randu_hash;
424bless $gsl_rng_randu, Math::GSL::RNG::gsl_rng_type;
425
426my %__gsl_rng_ranf_hash;
427tie %__gsl_rng_ranf_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_ranf;
428$gsl_rng_ranf= \%__gsl_rng_ranf_hash;
429bless $gsl_rng_ranf, Math::GSL::RNG::gsl_rng_type;
430
431my %__gsl_rng_ranlux_hash;
432tie %__gsl_rng_ranlux_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_ranlux;
433$gsl_rng_ranlux= \%__gsl_rng_ranlux_hash;
434bless $gsl_rng_ranlux, Math::GSL::RNG::gsl_rng_type;
435
436my %__gsl_rng_ranlux389_hash;
437tie %__gsl_rng_ranlux389_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_ranlux389;
438$gsl_rng_ranlux389= \%__gsl_rng_ranlux389_hash;
439bless $gsl_rng_ranlux389, Math::GSL::RNG::gsl_rng_type;
440
441my %__gsl_rng_ranlxd1_hash;
442tie %__gsl_rng_ranlxd1_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_ranlxd1;
443$gsl_rng_ranlxd1= \%__gsl_rng_ranlxd1_hash;
444bless $gsl_rng_ranlxd1, Math::GSL::RNG::gsl_rng_type;
445
446my %__gsl_rng_ranlxd2_hash;
447tie %__gsl_rng_ranlxd2_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_ranlxd2;
448$gsl_rng_ranlxd2= \%__gsl_rng_ranlxd2_hash;
449bless $gsl_rng_ranlxd2, Math::GSL::RNG::gsl_rng_type;
450
451my %__gsl_rng_ranlxs0_hash;
452tie %__gsl_rng_ranlxs0_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_ranlxs0;
453$gsl_rng_ranlxs0= \%__gsl_rng_ranlxs0_hash;
454bless $gsl_rng_ranlxs0, Math::GSL::RNG::gsl_rng_type;
455
456my %__gsl_rng_ranlxs1_hash;
457tie %__gsl_rng_ranlxs1_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_ranlxs1;
458$gsl_rng_ranlxs1= \%__gsl_rng_ranlxs1_hash;
459bless $gsl_rng_ranlxs1, Math::GSL::RNG::gsl_rng_type;
460
461my %__gsl_rng_ranlxs2_hash;
462tie %__gsl_rng_ranlxs2_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_ranlxs2;
463$gsl_rng_ranlxs2= \%__gsl_rng_ranlxs2_hash;
464bless $gsl_rng_ranlxs2, Math::GSL::RNG::gsl_rng_type;
465
466my %__gsl_rng_ranmar_hash;
467tie %__gsl_rng_ranmar_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_ranmar;
468$gsl_rng_ranmar= \%__gsl_rng_ranmar_hash;
469bless $gsl_rng_ranmar, Math::GSL::RNG::gsl_rng_type;
470
471my %__gsl_rng_slatec_hash;
472tie %__gsl_rng_slatec_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_slatec;
473$gsl_rng_slatec= \%__gsl_rng_slatec_hash;
474bless $gsl_rng_slatec, Math::GSL::RNG::gsl_rng_type;
475
476my %__gsl_rng_taus_hash;
477tie %__gsl_rng_taus_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_taus;
478$gsl_rng_taus= \%__gsl_rng_taus_hash;
479bless $gsl_rng_taus, Math::GSL::RNG::gsl_rng_type;
480
481my %__gsl_rng_taus2_hash;
482tie %__gsl_rng_taus2_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_taus2;
483$gsl_rng_taus2= \%__gsl_rng_taus2_hash;
484bless $gsl_rng_taus2, Math::GSL::RNG::gsl_rng_type;
485
486my %__gsl_rng_taus113_hash;
487tie %__gsl_rng_taus113_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_taus113;
488$gsl_rng_taus113= \%__gsl_rng_taus113_hash;
489bless $gsl_rng_taus113, Math::GSL::RNG::gsl_rng_type;
490
491my %__gsl_rng_transputer_hash;
492tie %__gsl_rng_transputer_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_transputer;
493$gsl_rng_transputer= \%__gsl_rng_transputer_hash;
494bless $gsl_rng_transputer, Math::GSL::RNG::gsl_rng_type;
495
496my %__gsl_rng_tt800_hash;
497tie %__gsl_rng_tt800_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_tt800;
498$gsl_rng_tt800= \%__gsl_rng_tt800_hash;
499bless $gsl_rng_tt800, Math::GSL::RNG::gsl_rng_type;
500
501my %__gsl_rng_uni_hash;
502tie %__gsl_rng_uni_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_uni;
503$gsl_rng_uni= \%__gsl_rng_uni_hash;
504bless $gsl_rng_uni, Math::GSL::RNG::gsl_rng_type;
505
506my %__gsl_rng_uni32_hash;
507tie %__gsl_rng_uni32_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_uni32;
508$gsl_rng_uni32= \%__gsl_rng_uni32_hash;
509bless $gsl_rng_uni32, Math::GSL::RNG::gsl_rng_type;
510
511my %__gsl_rng_vax_hash;
512tie %__gsl_rng_vax_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_vax;
513$gsl_rng_vax= \%__gsl_rng_vax_hash;
514bless $gsl_rng_vax, Math::GSL::RNG::gsl_rng_type;
515
516my %__gsl_rng_waterman14_hash;
517tie %__gsl_rng_waterman14_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_waterman14;
518$gsl_rng_waterman14= \%__gsl_rng_waterman14_hash;
519bless $gsl_rng_waterman14, Math::GSL::RNG::gsl_rng_type;
520
521my %__gsl_rng_zuf_hash;
522tie %__gsl_rng_zuf_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_zuf;
523$gsl_rng_zuf= \%__gsl_rng_zuf_hash;
524bless $gsl_rng_zuf, Math::GSL::RNG::gsl_rng_type;
525
526my %__gsl_rng_default_hash;
527tie %__gsl_rng_default_hash,"Math::GSL::RNG::gsl_rng_type", $Math::GSL::RNGc::gsl_rng_default;
528$gsl_rng_default= \%__gsl_rng_default_hash;
529bless $gsl_rng_default, Math::GSL::RNG::gsl_rng_type;
530*gsl_rng_default_seed = *Math::GSL::RNGc::gsl_rng_default_seed;
531
532
533use Carp;
534
535@EXPORT_OK = qw/
536                 gsl_rng_alloc gsl_rng_set gsl_rng_get gsl_rng_free gsl_rng_memcpy
537                 gsl_rng_fwrite gsl_rng_fread gsl_rng_clone gsl_rng_max gsl_rng_min
538                 gsl_rng_name gsl_rng_size gsl_rng_state gsl_rng_print_state gsl_rng_uniform gsl_rng_uniform_pos gsl_rng_uniform_int
539                $gsl_rng_default $gsl_rng_knuthran $gsl_rng_ran0 $gsl_rng_borosh13
540                $gsl_rng_coveyou $gsl_rng_cmrg $gsl_rng_fishman18 $gsl_rng_fishman20 $gsl_rng_fishman2x
541                $gsl_rng_gfsr4 $gsl_rng_knuthran $gsl_rng_knuthran2 $gsl_rng_knuthran2002 $gsl_rng_lecuyer21
542                $gsl_rng_minstd $gsl_rng_mrg $gsl_rng_mt19937 $gsl_rng_mt19937_1999 $gsl_rng_mt19937_1998
543                $gsl_rng_r250 $gsl_rng_ran0 $gsl_rng_ran1 $gsl_rng_ran2 $gsl_rng_ran3
544                $gsl_rng_rand $gsl_rng_rand48 $gsl_rng_random128_bsd $gsl_rng_random128_gli $gsl_rng_random128_lib
545                $gsl_rng_random256_bsd $gsl_rng_random256_gli $gsl_rng_random256_lib $gsl_rng_random32_bsd
546                $gsl_rng_random32_glib $gsl_rng_random32_libc $gsl_rng_random64_bsd $gsl_rng_random64_glib
547                $gsl_rng_random64_libc $gsl_rng_random8_bsd $gsl_rng_random8_glibc $gsl_rng_random8_libc5
548                $gsl_rng_random_bsd $gsl_rng_random_glibc2 $gsl_rng_random_libc5 $gsl_rng_randu
549                $gsl_rng_ranf $gsl_rng_ranlux $gsl_rng_ranlux389 $gsl_rng_ranlxd1 $gsl_rng_ranlxd2 $gsl_rng_ranlxs0
550                $gsl_rng_ranlxs1 $gsl_rng_ranlxs2 $gsl_rng_ranmar $gsl_rng_slatec $gsl_rng_taus $gsl_rng_taus2
551                $gsl_rng_taus113 $gsl_rng_transputer $gsl_rng_tt800 $gsl_rng_uni $gsl_rng_uni32 $gsl_rng_vax
552                $gsl_rng_waterman14 $gsl_rng_zuf
553              /;
554%EXPORT_TAGS = ( all => [ @EXPORT_OK ] );
555
556=encoding utf8
557
558=head1 NAME
559
560Math::GSL::RNG - Random Number Generators
561
562=head1 SYNOPSIS
563
564    use Math::GSL::RNG;
565    my $rng     = Math::GSL::RNG->new;
566    my @random  = $rng->get(100);
567
568=head1 Object Oriented Interface
569
570=head2 Math::GSL::RNG->new($type, $seed)
571
572    my $rng = Math::GSL::RNG->new;
573    my $rng = Math::GSL::RNG->new($gsl_rng_knuthran,5);
574
575Creates a new RNG object of type $type, seeded with $seed. Both of these
576parameters are optional. The type $gsl_rng_default is used when no $type
577is given.
578
579=cut
580
581sub new {
582    my ($class, $type, $seed) = @_;
583    $type ||= $gsl_rng_default;
584    $seed ||= int 100*rand;
585
586    my $self = {};
587    my $rng  = gsl_rng_alloc($type);
588    gsl_rng_set($rng, $seed);
589
590    $self->{_rng} = $rng;
591    bless $self, $class;
592}
593
594=head2 copy()
595
596    my $copy = $rng->copy;
597
598Make a copy of a RNG object.
599
600=cut
601
602sub copy {
603    my ($self)    = @_;
604    my $copy      = Math::GSL::RNG->new;
605    $copy->{_rng} = gsl_rng_clone($self->{_rng});
606
607    return $copy;
608}
609
610=head2 free()
611
612    $rng->free();
613
614Free memory associated with RNG object.
615
616=cut
617
618sub free {
619    my ($self)    = @_;
620    gsl_rng_free($self->{_rng});
621}
622
623=head2 name()
624
625   my $name = $rng->name();
626
627Get the name of the RNG object as a string.
628
629=cut
630
631sub name {
632    my ($self)    = @_;
633    gsl_rng_name($self->{_rng});
634}
635
636=head2 get()
637
638    my $nextval  = $rng->get;
639    my (@values) = $rng->get(100);
640
641Get the next random value from the RNG object. If given an integer N, returns the next N values.
642
643=cut
644
645sub get {
646    my ($self, $num_values) = @_;
647    $num_values ||= 1;
648
649    return map { gsl_rng_get($self->{_rng}) } (1 .. $num_values);
650}
651
652=head2 raw()
653
654    my $raw = $rng->raw();
655
656Return the raw GSL RNG object, useful for functions which take a RNG,
657such as the Monte Carlo integration functions or the random number
658distribution functions in Math::GSL::Randist.
659
660=cut
661
662sub raw {
663    my $self = shift;
664    return $self->{_rng};
665}
666
667=head2 shuffle()
668
669   my @array = $rng->shuffle(@other_array);
670
671Given a RNG, shuffle an array.
672
673=cut
674
675sub shuffle {
676    my ($self, @array) = @_;
677
678    my $nr_elements = $#array;
679    my $output = Math::GSL::Randist::our_gsl_ran_shuffle($self->raw,
680                                                         [0..$nr_elements],
681                                                         $nr_elements + 1);
682    return map { $array[$_] } @$output;
683}
684
685=head2 choose()
686
687   my @array = $rng->choose(4, @other_array);
688
689This function fills the destination array with k objects taken
690randomly from the n elements of the array argument.  The objects are
691sampled without replacement, thus each object can only appear once in
692destination array. It is required that k be less than or equal to n.
693
694=cut
695
696sub choose {
697    my ($self, $k, @array) = @_;
698
699    my $nr_elements = $#array;
700    croak __PACKAGE__, "- choose method called with k greater than number of elements in the array"
701      if $k > $nr_elements + 1;
702
703    my $output = Math::GSL::Randist::our_gsl_ran_choose($self->raw, $k,
704                                                        [0..$nr_elements],
705                                                        $nr_elements + 1);
706    return map { $array[$_] } @$output;
707}
708
709
710=head2 sample()
711
712   my @array = $rng->sample(4, @other_array);
713
714This method is like C<choose> but samples k items from the original
715array of n items src with replacement, so the same object can appear
716more than once in the output sequence dest. There is no requirement
717that k be less than n in this case.
718
719=cut
720
721sub sample {
722    my ($self, $k, @array) = @_;
723
724    my $nr_elements = $#array;
725
726    my $output = Math::GSL::Randist::our_gsl_ran_sample($self->raw, $k,
727                                                        [0..$nr_elements],
728                                                        $nr_elements + 1);
729    return map { $array[$_] } @$output;
730}
731
732
733__END__
734
735
736=head1 GSL API Interface
737
738=over 1
739
740=item gsl_rng_alloc($T) - This function returns a pointer to a newly-created instance of a random number generator of type $T. $T must be one of the constants below. The generator is automatically initialized with the default seed, $gsl_rng_default.
741
742=item gsl_rng_set($r, $s) - This function initializes (or `seeds') the random number generator. If the generator is seeded with the same value of $s on two different runs, the same stream of random numbers will be generated by successive calls to the routines below. If different values of $s are supplied, then the generated streams of random numbers should be completely different. If the seed $s is zero then the standard seed from the original implementation is used instead. For example, the original Fortran source code for the ranlux generator used a seed of 314159265, and so choosing $s equal to zero reproduces this when using $gsl_rng_ranlux.
743
744=item gsl_rng_get($r) - This function returns a random integer from the generator $r. The minimum and maximum values depend on the algorithm used, but all integers in the range [min,max] are equally likely. The values of min and max can determined using the auxiliary functions gsl_rng_max($r) and gsl_rng_min($r).
745
746=item gsl_rng_free($r) - This function frees all the memory associated with the generator $r.
747
748=item gsl_rng_memcpy($dest, $src) - This function copies the random number generator $src into the pre-existing generator $dest, making $dest into an exact copy of $src. The two generators must be of the same type.
749
750=item gsl_rng_uniform($r) - This function returns a double precision floating point number uniformly distributed in the range [0,1). The range includes 0.0 but excludes 1.0. The value is typically obtained by dividing the result of gsl_rng_get($r) by gsl_rng_max($r) + 1.0 in double precision. Some generators compute this ratio internally so that they can provide floating point numbers with more than 32 bits of randomness (the maximum number of bits that can be portably represented in a single unsigned long int).
751
752=item gsl_rng_uniform_pos($r) - This function returns a positive double precision floating point number uniformly distributed in the range (0,1), excluding both 0.0 and 1.0. The number is obtained by sampling the generator with the algorithm of gsl_rng_uniform until a non-zero value is obtained. You can use this function if you need to avoid a singularity at 0.0.
753
754=item gsl_rng_uniform_int($r, $n) - This function returns a random integer from 0 to $n-1 inclusive by scaling down and/or discarding samples from the generator $r. All integers in the range [0,$n-1] are produced with equal probability. For generators with a non-zero minimum value an offset is applied so that zero is returned with the correct probability. Note that this function is designed for sampling from ranges smaller than the range of the underlying generator. The parameter $n must be less than or equal to the range of the generator $r. If $n is larger than the range of the generator then the function calls the error handler with an error code of $GSL_EINVAL and returns zero. In particular, this function is not intended for generating the full range of unsigned integer values [0,2^32-1]. Instead choose a generator with the maximal integer range and zero mimimum value, such as $gsl_rng_ranlxd1, $gsl_rng_mt19937 or $gsl_rng_taus, and sample it directly using gsl_rng_get. The range of each generator can be found using the auxiliary functions described in the next section.
755
756=item gsl_rng_fwrite($stream, $r) - This function writes the random number state of the random number generator $r to the stream $stream (opened with the gsl_fopen function from the Math::GSL module) in binary format. The return value is 0 for success and $GSL_EFAILED if there was a problem writing to the file. Since the data is written in the native binary format it may not be portable between different architectures.
757
758=item gsl_rng_fread($stream, $r) - This function reads the random number state into the random number generator $r from the open stream $stream (opened with the gsl_fopen function from the Math::GSL module) in binary format. The random number generator $r must be preinitialized with the correct random number generator type since type information is not saved. The return value is 0 for success and $GSL_EFAILED if there was a problem reading from the file. The data is assumed to have been written in the native binary format on the same architecture.
759
760=item gsl_rng_clone($r) - This function returns a pointer to a newly created generator which is an exact copy of the generator $r.
761
762=item gsl_rng_max($r) - This function returns the largest value that gsl_rng_get can return.
763
764=item gsl_rng_min($r) - gsl_rng_min returns the smallest value that gsl_rng_get can return. Usually this value is zero. There are some generators with algorithms that cannot return zero, and for these generators the minimum value is 1.
765
766=item gsl_rng_name($r) - This function returns a pointer to the name of the generator. For example,
767
768=over
769
770=item print "r is a " . gsl_rng_name($r) . "generator\n";
771
772=item would print something like r is a 'taus' generator.
773
774=back
775
776=item gsl_rng_size($r) - This function returns the size of the state of generator $r. You can use this information to access the state directly.
777
778=item gsl_rng_state($r) - This function returns a pointer to the state of generator $r. You can use this information to access the state directly.
779
780=item gsl_rng_print_state($r)
781
782=back
783
784=head1 Random Number Generator Types
785
786=over 1
787
788=item $gsl_rng_default
789
790=item $gsl_rng_knuthran
791
792=item $gsl_rng_ran0
793
794=item $gsl_rng_borosh13
795
796=item $gsl_rng_coveyou
797
798=item $gsl_rng_cmrg
799
800=item $gsl_rng_fishman18
801
802=item $gsl_rng_fishman20
803
804=item $gsl_rng_fishman2x - This is the L'Ecuyer-Fishman random number generator. It is taken from Knuth's Seminumerical Algorithms, 3rd Ed., page 108. Its sequence is, z_{n+1} = (x_n - y_n) mod m with m = 2^31 - 1. x_n and y_n are given by the fishman20 and lecuyer21 algorithms. The seed specifies the initial value, x_1.
805
806=item $gsl_rng_gfsr4
807
808=item $gsl_rng_knuthran
809
810=item $gsl_rng_knuthran2
811
812=item $gsl_rng_knuthran2002
813
814=item $gsl_rng_lecuyer21
815
816=item $gsl_rng_minstd
817
818=item $gsl_rng_mrg
819
820=item $gsl_rng_mt19937
821
822=item $gsl_rng_mt19937_1999
823
824=item $gsl_rng_mt19937_1998
825
826=item $gsl_rng_r250
827
828=item $gsl_rng_ran0
829
830=item $gsl_rng_ran1
831
832=item $gsl_rng_ran2
833
834=item $gsl_rng_ran3
835
836=item $gsl_rng_rand - This is the BSD rand generator. Its sequence is x_{n+1} = (a x_n + c) mod m with a = 1103515245, c = 12345 and m = 2^31. The seed specifies the initial value, x_1. The period of this generator is 2^31, and it uses 1 word of storage per generator.
837
838=item $gsl_rng_rand48
839
840=item $gsl_rng_random128_bsd
841
842=item $gsl_rng_random128_gli
843
844=item $gsl_rng_random128_lib
845
846=item $gsl_rng_random256_bsd
847
848=item $gsl_rng_random256_gli
849
850=item $gsl_rng_random256_lib
851
852=item $gsl_rng_random32_bsd
853
854=item $gsl_rng_random32_glib
855
856=item $gsl_rng_random32_libc
857
858=item $gsl_rng_random64_bsd
859
860=item $gsl_rng_random64_glib
861
862=item $gsl_rng_random64_libc
863
864=item $gsl_rng_random8_bsd
865
866=item $gsl_rng_random8_glibc
867
868=item $gsl_rng_random8_libc5
869
870=item $gsl_rng_random_bsd
871
872=item $gsl_rng_random_glibc2
873
874=item $gsl_rng_random_libc5
875
876=item $gsl_rng_randu
877
878=item $gsl_rng_ranf
879
880=item $gsl_rng_ranlux
881
882=item $gsl_rng_ranlux389
883
884=item $gsl_rng_ranlxd1
885
886=item $gsl_rng_ranlxd2
887
888=item $gsl_rng_ranlxs0
889
890=item $gsl_rng_ranlxs1
891
892=item $gsl_rng_ranlxs2
893
894=item $gsl_rng_ranmar - This is the RANMAR lagged-fibonacci generator of Marsaglia, Zaman and Tsang. It is a 24-bit generator, originally designed for single-precision IEEE floating point numbers. It was included in the CERNLIB high-energy physics library.
895
896=item $gsl_rng_slatec - This is the SLATEC random number generator RAND. It is ancient. The original source code is available from NETLIB.
897
898=item $gsl_rng_taus
899
900=item $gsl_rng_taus2
901
902=item $gsl_rng_taus113
903
904=item $gsl_rng_transputer
905
906=item $gsl_rng_tt800
907
908=item $gsl_rng_uni
909
910=item $gsl_rng_uni32
911
912=item $gsl_rng_vax - This is the VAX generator MTH$RANDOM. Its sequence is, x_{n+1} = (a x_n + c) mod m with a = 69069, c = 1 and m = 2^32. The seed specifies the initial value, x_1. The period of this generator is 2^32 and it uses 1 word of storage per generator.
913
914=item $gsl_rng_waterman14
915
916=item $gsl_rng_zuf - This is the ZUFALL lagged Fibonacci series generator of Peterson. Its sequence is,
917
918=over
919
920=item          t = u_{n-273} + u_{n-607}
921
922=item          u_n  = t - floor(t)
923
924=back
925
926 The original source code is available from NETLIB. For more information see,
927
928 * W. Petersen, “Lagged Fibonacci Random Number Generators for the NEC SX-3”, International Journal of High Speed Computing (1994).
929
930=back
931
932For more informations on the functions, we refer you to the GSL official documentation:
933
934L<http://www.gnu.org/software/gsl/manual/html_node/>
935
936
937
938=head1 EXAMPLES
939
940The following example will print out a list a random integers between certain
941minimum and maximum values. The command line arguments are first the number of
942random numbers wanted, the minimum and then maximum. The defaults are 10, 0 and
943100, respectively.
944
945    use Math::GSL::RNG qw/:all/;
946    my $seed = int rand(100);
947    my $rng  = Math::GSL::RNG->new($gsl_rng_knuthran, $seed );
948    my ($num,$min,$max) = @ARGV;
949    $num ||= 10;
950    $min ||= 0;
951    $max ||= 100;
952    print join "\n", map { $min + $rng->get % ($max-$min+1)  } (1..$num);
953    print "\n";
954
955The C<$seed> argument is optional but encouraged. This program is available in
956the B<examples/> directory that comes with the source of this module.
957
958If you would like a series of random non-integer numbers, then you can generate one "scaling factor"
959and multiple by that, such as
960
961    use Math::GSL::RNG qw/:all/;
962    my $scale= rand(10);
963    my $seed = int rand(100);
964    my $rng  = Math::GSL::RNG->new($gsl_rng_knuthran, $seed );
965    my ($num,$min,$max) = (10,0,100);
966    print join "\n", map { $scale*($min + $rng->get % ($max-$min+1))  } (1..$num);
967    print "\n";
968
969=head1 AUTHORS
970
971Jonathan "Duke" Leto <jonathan@leto.net> and Thierry Moisan <thierry.moisan@gmail.com>
972
973=head1 COPYRIGHT AND LICENSE
974
975Copyright (C) 2008-2021 Jonathan "Duke" Leto and Thierry Moisan
976
977This program is free software; you can redistribute it and/or modify it
978under the same terms as Perl itself.
979
980=cut
981
9821;
983