LibRan  0.1
Pseudo-random number distribution generator
libran.h
Go to the documentation of this file.
1 
4 /*
5  * Copyright 2019 R.K. Owen, Ph.D.
6  * License see lgpl.md (Gnu Lesser General Public License)
7  */
8 
9 #ifndef _LIBRAN_H_
10 # define _LIBRAN_H_
11 # ifdef __cplusplus
12 extern "C" {
13 # endif
14 
15 # include <stdarg.h>
16 
20 # define LR_VER_MAJOR 0
21 # define LR_VER_MINOR 5
22 # define LR_VER_PATCH 1
23 # define LR_VERSION LR_VER_MAJOR.LR_VER_MINOR.LR_VER_PATCH
24 
27 # define LR_DATE 20191201
28 
32 # define LRerr_OK 0x00
33 # define LRerr_Unspecified 0x01
34 # define LRerr_BadDataType 0x03
35 # define LRerr_BadLRType 0x05
36 # define LRerr_NoAuxiliaryObject 0x09
37 # define LRerr_NoAuxNormalizeDone 0x0B
38 # define LRerr_BadAuxSetup 0x0D
39 # define LRerr_BinGeneric 0x11
40 # define LRerr_TooManyValues 0x13
41 # define LRerr_InvalidInputValue 0x15
42 # define LRerr_InvalidRange 0x17
43 # define LRerr_UnmetPreconditions 0x19
44 # define LRerr_SuspiciousValues 0x1B
45 # define LRerr_AllocFail 0x1D
46 # define LRerr_InvalidCDF 0x21
52 typedef enum {
53 
54  poisson = 1,
58  unif,
64  gsn2,
65  gsn4,
67  logd,
68  nexp,
72 } LR_type;
73 
83 typedef union {
84  long l;
85  int i;
86  float f;
87  double d;
88 } LR_val;
89 
98 typedef enum {
99  LR_int = 1,
103 } LR_data_type;
104 
109 /* tag & predefine the fns object */
110 typedef struct LR_obj LR_obj;
111 
134 struct LR_obj {
135  const char const * type;
143  int k;
144  int n;
145  float p;
146  float q;
151  int (*ui)(LR_obj *);
152  long (*ul)(LR_obj *);
153  float (*uf)(LR_obj *);
154  double (*ud)(LR_obj *);
156  float (*rnf)(LR_obj *);
157  double (*rnd)(LR_obj *);
158  int (*rni)(LR_obj *);
160  float (*pdff)(LR_obj *, float);
161  double (*pdfd)(LR_obj *, double);
162  float (*pdfi)(LR_obj *, int);
164  float (*cdff)(LR_obj *, float);
165  double (*cdfd)(LR_obj *, double);
166  float (*cdfi)(LR_obj *, int);
168  void * aux;
169  int errno;
170 };
171 
184 typedef struct {
185  int n;
186  int nn;
187  long c;
188  double * bdrs;
189  long * bins;
190  int errno;
191 } LR_bin;
192 
206 typedef struct {
207  int n;
208  int nn;
209  double * bdrs;
210  double * c;
211  double * sc;
212  double norm;
213  int flags;
216  int (*new)(LR_obj *o, int n);
217  int (*rm)(LR_obj *o);
218  int (*set)(LR_obj *o, double x, double p);
219  int (*normalize)(LR_obj *o);
220 } LR_pcs;
221 
223 # define LR_AUX_NORM 0x01
224 # define LR_AUX_SET 0x02
238 typedef struct {
239  double (*dcdf)(double x); /*<! double version of CDF */
240  float (*fcdf)(float x); /*<! float version of CDF */
241 } LR_uinvcdf;
242 
243 /* LibRan function declarations */
245 int LR_rm(LR_obj **o);
246 int LR_check(LR_obj *o);
247 
248 /* LibRan object parameter setting */
249 int LR_vset(LR_obj *o, char *x, va_list ap);
250 int LR_set(LR_obj *o, char x, ...);
251 int LR_set_all(LR_obj *o, char *x, ...);
252 
253 /* LibRan binning object */
254 LR_bin *LR_bin_new(int n);
255 int LR_bin_rm(LR_bin **b);
256 int LR_bin_set(LR_bin *b, double x);
257 int LR_bin_add(LR_bin *b, double x);
258 
259 /* LibRan error and info routines */
260 char *LRstrerror(int LRerrno);
261 char *LRstrerrno(int LRerrno);
262 void LRperror(char *str, int LRerrno);
263 char *LRversion(char *str);
264 
265 /* urand routines */
266 int LR_irand(LR_obj *);
267 float LR_frand(LR_obj *);
268 void LR_isetseed(LR_obj *, int ity);
269 int LR_igetseed(LR_obj *);
270 int LR_igetrand(LR_obj *);
271 float LR_fgetrand(LR_obj *);
272 
273 long LR_lrand(LR_obj *);
274 double LR_drand(LR_obj *);
275 void LR_lsetseed(LR_obj *, long lty);
276 long LR_lgetseed(LR_obj *);
277 long LR_lgetrand(LR_obj *);
278 double LR_dgetrand(LR_obj *);
279 
280 int LR_igetval(char *str);
281 long LR_lgetval(char *str);
282 float LR_fgetval(char *str);
283 double LR_dgetval(char *str);
284 
285 /* LibRan generic distribution functions */
286 /* double */
287 double LRd_RAN(LR_obj *o);
288 double LRd_PDF(LR_obj *o, double x);
289 double LRd_CDF(LR_obj *o, double x);
290 /* float */
291 float LRf_RAN(LR_obj *o);
292 float LRf_PDF(LR_obj *o, float x);
293 float LRf_CDF(LR_obj *o, float x);
294 /* int */
295 int LRi_RAN(LR_obj *o);
296 float LRi_PDF(LR_obj *o, int x);
297 float LRi_CDF(LR_obj *o, int x);
298 /* LibRan generic auxiliary functions */
299 int LR_aux_new(LR_obj *o, int n);
300 int LR_aux_rm(LR_obj *o);
301 int LR_aux_set(LR_obj *o, double x, double p);
302 int LR_aux_norm(LR_obj *o);
303 
304 /* specific LibRan distribution functions */
305 /* double unif */
306 double LRd_unif_RAN(LR_obj *o);
307 double LRd_unif_PDF(LR_obj *o, double x);
308 double LRd_unif_CDF(LR_obj *o, double x);
309 /* float unif */
310 float LRf_unif_RAN(LR_obj *o);
311 float LRf_unif_PDF(LR_obj *o, float x);
312 float LRf_unif_CDF(LR_obj *o, float x);
313 
314 /* piecewise uniform */
315 int LR_pcs_new(LR_obj *o, int n);
316 int LR_pcs_rm(LR_obj *o);
317 int LR_pcs_set(LR_obj *o, double x, double p);
318 int LR_pcs_norm(LR_obj *o);
319 /* double piece */
320 double LRd_piece_RAN(LR_obj *o);
321 double LRd_piece_PDF(LR_obj *o, double x);
322 double LRd_piece_CDF(LR_obj *o, double x);
323 /* float piece */
324 float LRf_piece_RAN(LR_obj *o);
325 float LRf_piece_PDF(LR_obj *o, float x);
326 float LRf_piece_CDF(LR_obj *o, float x);
327 
328 /* linear spline */
329 int LR_lspl_new(LR_obj *o, int n);
330 int LR_lspl_rm(LR_obj *o);
331 int LR_lspl_set(LR_obj *o, double x, double p);
332 int LR_lspl_norm(LR_obj *o);
333 /* double linear spline */
334 double LRd_lspline_RAN(LR_obj *o);
335 double LRd_lspline_PDF(LR_obj *o, double x);
336 double LRd_lspline_CDF(LR_obj *o, double x);
337 /* float linear spline */
338 float LRf_lspline_RAN(LR_obj *o);
339 float LRf_lspline_PDF(LR_obj *o, float x);
340 float LRf_lspline_CDF(LR_obj *o, float x);
341 
342 /* double user inverse CDF */
343 double LRd_uinvcdf_RAN(LR_obj *o);
344 double LRd_uinvcdf_PDF(LR_obj *o, double x);
345 double LRd_uinvcdf_CDF(LR_obj *o, double x);
346 int LRd_uinvcdf(LR_obj *o, double (*cdf)(double));
347 /* float user inverse CDF spline */
348 float LRf_uinvcdf_RAN(LR_obj *o);
349 float LRf_uinvcdf_PDF(LR_obj *o, float x);
350 float LRf_uinvcdf_CDF(LR_obj *o, float x);
351 int LRf_uinvcdf(LR_obj *o, float (*cdf)(float));
352 
353 /* double negative exponential */
354 double LRd_nexp_RAN(LR_obj *o);
355 double LRd_nexp_PDF(LR_obj *o, double x);
356 double LRd_nexp_CDF(LR_obj *o, double x);
357 /* float negative exponential */
358 float LRf_nexp_RAN(LR_obj *o);
359 float LRf_nexp_PDF(LR_obj *o, float x);
360 float LRf_nexp_CDF(LR_obj *o, float x);
361 
362 /* double Erlang */
363 double LRd_erlang_RAN(LR_obj *o);
364 double LRd_erlang_PDF(LR_obj *o, double x);
365 double LRd_erlang_CDF(LR_obj *o, double x);
366 /* float Erlang */
367 float LRf_erlang_RAN(LR_obj *o);
368 float LRf_erlang_PDF(LR_obj *o, float x);
369 float LRf_erlang_CDF(LR_obj *o, float x);
370 
371 /* double gaussian */
372 double LRd_gausbm_RAN(LR_obj *o);
373 double LRd_gausmar_RAN(LR_obj *o);
374 double LRd_gaus_PDF(LR_obj *o, double x);
375 double LRd_gaus_CDF(LR_obj *o, double x);
376 /* float gaussian */
377 float LRf_gausbm_RAN(LR_obj *o);
378 float LRf_gausmar_RAN(LR_obj *o);
379 float LRf_gaus_PDF(LR_obj *o, float x);
380 float LRf_gaus_CDF(LR_obj *o, float x);
381 
382 /* double gsn2 */
383 double LRd_gsn2_RAN(LR_obj *o);
384 double LRd_gsn2_PDF(LR_obj *o, double x);
385 double LRd_gsn2_CDF(LR_obj *o, double x);
386 /* float gsn2 */
387 float LRf_gsn2_RAN(LR_obj *o);
388 float LRf_gsn2_PDF(LR_obj *o, float x);
389 float LRf_gsn2_CDF(LR_obj *o, float x);
390 
391 /* double gsn4 */
392 double LRd_gsn4_RAN(LR_obj *o);
393 double LRd_gsn4_PDF(LR_obj *o, double x);
394 double LRd_gsn4_CDF(LR_obj *o, double x);
395 /* float gsn4 */
396 float LRf_gsn4_RAN(LR_obj *o);
397 float LRf_gsn4_PDF(LR_obj *o, float x);
398 float LRf_gsn4_CDF(LR_obj *o, float x);
399 
400 /* double gsn12 */
401 double LRd_gsn12_RAN(LR_obj *o);
402 double LRd_gsn12_PDF(LR_obj *o, double x);
403 double LRd_gsn12_CDF(LR_obj *o, double x);
404 double LRd_xgsn12_PDF(LR_obj *o, double x);
405 double LRd_xgsn12_CDF(LR_obj *o, double x);
406 /* float gsn12 */
407 float LRf_gsn12_RAN(LR_obj *o);
408 float LRf_gsn12_PDF(LR_obj *o, float x);
409 float LRf_gsn12_CDF(LR_obj *o, float x);
410 
411 /* double cauchy */
412 double LRd_cauchy_RAN(LR_obj *o);
413 double LRd_cauchymar_RAN(LR_obj *o);
414 double LRd_cauchy_PDF(LR_obj *o, double x);
415 double LRd_cauchy_CDF(LR_obj *o, double x);
416 /* float cauchy */
417 float LRf_cauchy_RAN(LR_obj *o);
418 float LRf_cauchymar_RAN(LR_obj *o);
419 float LRf_cauchy_PDF(LR_obj *o, float x);
420 float LRf_cauchy_CDF(LR_obj *o, float x);
421 
422 /* Poisson */
423 int LRi_poisson_RAN(LR_obj *o);
424 float LRi_poisson_PDF(LR_obj *o, int x);
425 float LRi_poisson_CDF(LR_obj *o, int x);
426 
427 /* Geometric */
428 int LRi_geometric_RAN(LR_obj *o);
429 float LRi_geometric_PDF(LR_obj *o, int x);
430 float LRi_geometric_CDF(LR_obj *o, int x);
431 
432 /* Binomial */
433 int LRi_binomial_RAN(LR_obj *o);
434 float LRi_binomial_PDF(LR_obj *o, int x);
435 float LRi_binomial_CDF(LR_obj *o, int x);
436 
437 # ifdef __cplusplus
438 }
439 # endif
440 #endif /* _LIBRAN_H_ */
LR_val iy
Definition: libran.h:148
float LRf_gsn4_CDF(LR_obj *o, float x)
LRf_gsn4_CDF(LR_obj *o, float x) - float gaussian-like (saw tooth) cumulative distribution function...
Definition: LRgsn.c:496
double * sc
Definition: libran.h:211
LR_data_type
an enum of allowed value types
Definition: libran.h:98
double LRd_nexp_RAN(LR_obj *o)
LRd_nexp_RAN(LR_obj *o) - double random negative exponential distribution using the inversion method...
Definition: LRnexp.c:57
int LR_aux_norm(LR_obj *o)
LR_aux_norm(LR_obj *o) - process given intervals and normalize values.
Definition: LRdf.c:301
double LRd_unif_RAN(LR_obj *o)
LRd_unif_RAN(LR_obj *o) - double random uniform distribution.
Definition: LRunif.c:55
LR_val b
Definition: libran.h:139
int LR_set(LR_obj *o, char x,...)
LR_set(LR_obj *o, char x, ...) - set a single LR object parameter.
Definition: LRset.c:165
float(* cdff)(LR_obj *, float)
Definition: libran.h:164
LR_data_type d
Definition: libran.h:137
double LRd_unif_PDF(LR_obj *o, double x)
LRd_unif_PDF(LR_obj *o, double x) - double uniform probablity distribution function.
Definition: LRunif.c:69
float LR_fgetval(char *str)
LR_fgetval(char *val) - return the configure value.
Definition: urand.c:464
double LRd_nexp_PDF(LR_obj *o, double x)
LRd_nexp_PDF(LR_obj *o, double x) - double negative exponential probablity distribution function...
Definition: LRnexp.c:75
LR_bin * LR_bin_new(int n)
LR_bin_new(LR_data_type d, int n) - create new binning object.
Definition: LRbin.c:81
float(* pdff)(LR_obj *, float)
Definition: libran.h:160
float LRi_CDF(LR_obj *o, int x)
LRi_CDF(LR_obj *o, int x) - cumulative distribution function.
Definition: LRdf.c:221
int LR_igetrand(LR_obj *)
LR_igetrand(LR_obj *) - get the current pseudo-random number.
Definition: urand.c:243
long LR_lgetval(char *str)
LR_lgetval(char *val) - return the configure value.
Definition: urand.c:443
float LRf_cauchymar_RAN(LR_obj *o)
LRf_cauchymar_RAN(LR_obj *o) - float random Cauchy/Lorentz distribution using the polar method and th...
Definition: LRcauchy.c:147
double LR_drand(LR_obj *)
LR_drand(LR_obj *) - returns double in range [0.0,1.0)
Definition: urand.c:342
int LR_aux_rm(LR_obj *o)
LR_aux_rm(LR_obj *o) - remove the auxiliary object.
Definition: LRdf.c:260
Definition: libran.h:59
long * bins
Definition: libran.h:189
int LRi_RAN(LR_obj *o)
LRi_RAN(LR_obj *o) - random variate generator.
Definition: LRdf.c:179
float LRf_lspline_CDF(LR_obj *o, float x)
LRf_lspline_CDF(LR_obj *o, float x) - float linear spline cumulative distribution function...
Definition: LRlspline.c:390
float LRi_poisson_CDF(LR_obj *o, int x)
LRi_poisson_CDF(LR_obj *o, int x) - Poisson distribution cumulative distribution function.
Definition: LRpoisson.c:116
spans the set of allowed value types
Definition: libran.h:83
double LRd_gsn4_CDF(LR_obj *o, double x)
LRd_gsn4_CDF(LR_obj *o, double x) - double gaussian-like (saw tooth) cumulative distribution function...
Definition: LRgsn.c:418
void * aux
Definition: libran.h:168
int LR_aux_set(LR_obj *o, double x, double p)
LR_aux_set(LR_obj *o, double x, double p) - add an interval boundary for the underlying distribution...
Definition: LRdf.c:282
float LRf_erlang_PDF(LR_obj *o, float x)
LRf_erlang_PDF(LR_obj *o, float x) - Erlang distribution probablity distribution function.
Definition: LRerlang.c:163
double LRd_piece_PDF(LR_obj *o, double x)
LRd_piece_PDF(LR_obj *o, double x) - double piecewise uniform probablity distribution function...
Definition: LRpiece.c:305
double LRd_erlang_CDF(LR_obj *o, double x)
LRd_erlang_CDF(LR_obj *o, double x) - Erlang distribution cumulative distribution function...
Definition: LRerlang.c:118
double LR_dgetval(char *str)
LR_dgetval(char *val) - return the configure value.
Definition: urand.c:483
float LRf_gsn2_CDF(LR_obj *o, float x)
LRf_gsn2_CDF(LR_obj *o, float x) - float gaussian-like (saw tooth) cumulative distribution function...
Definition: LRgsn.c:271
Definition: libran.h:60
int LR_pcs_norm(LR_obj *o)
LR_pcs_norm(LR_obj *o) - normalize the interval scale factors.
Definition: LRpiece.c:220
int LRi_binomial_RAN(LR_obj *o)
LRi_binomial_RAN(LR_obj *o) - int Binomial distributed variate. Default values: probability of succes...
Definition: LRbinom.c:82
double LRd_gsn4_RAN(LR_obj *o)
LRd_gsn4_RAN(LR_obj *o) - double random g4 gaussian-like (simple bell curve) distribution.
Definition: LRgsn.c:373
double LRd_CDF(LR_obj *o, double x)
LRd_CDF(LR_obj *o, double x) - cumulative distribution function.
Definition: LRdf.c:101
float LRf_piece_RAN(LR_obj *o)
LRf_piece_RAN(LR_obj *o) - float random piecewise uniform distribution.
Definition: LRpiece.c:360
LR_type
an enum of allowed random variate distribution types
Definition: libran.h:52
int LRi_poisson_RAN(LR_obj *o)
LRi_poisson_RAN(LR_obj *o) - int Poisson distributed variate. Default values: scale m = 1...
Definition: LRpoisson.c:66
int LR_irand(LR_obj *)
LR_irand(LR_obj *) - returns int in range [0,LR_IRAND_IMAX].
Definition: urand.c:121
int LRd_uinvcdf(LR_obj *o, double(*cdf)(double))
LRd_uinvcdf() - set the user defined CDF for this variate distribution.
Definition: LRuinvcdf.c:131
float p
Definition: libran.h:145
int LRf_uinvcdf(LR_obj *o, float(*cdf)(float))
LRf_uinvcdf() - set the user defined CDF for this variate distribution.
Definition: LRuinvcdf.c:413
double(* rnd)(LR_obj *)
Definition: libran.h:157
LR_val x
Definition: libran.h:142
int LR_check(LR_obj *o)
LR_check(LR_obj *o) - check and fix the LR object parameters if possible.
Definition: LRnew.c:470
float LRf_gausmar_RAN(LR_obj *o)
LRf_gausmar_RAN(LR_obj *o) - float random Gaussian/Normal distribution using the Marsaglia method wit...
Definition: LRgaus.c:193
int LR_pcs_set(LR_obj *o, double x, double p)
LR_pcs_set(LR_obj *o, double x) - add interval boundary (will order internally).
Definition: LRpiece.c:158
float LRf_cauchy_CDF(LR_obj *o, float x)
LRf_cauchy_CDF(LR_obj *o, float x) - float Cauchy/Lorentz cumulative distribution function...
Definition: LRcauchy.c:180
float LRf_RAN(LR_obj *o)
LRf_RAN(LR_obj *o) - random variate generator.
Definition: LRdf.c:119
float LR_fgetrand(LR_obj *)
LR_fgetrand(LR_obj *) - get the current pseudo-random number.
Definition: urand.c:256
float LRf_lspline_PDF(LR_obj *o, float x)
LRf_lspline_PDF(LR_obj *o, float x) - float linear spline probablity distribution function...
Definition: LRlspline.c:356
A special object for defining some of the random variate distributions.
Definition: libran.h:206
int LR_igetval(char *str)
LR_igetval(char *val) - return the configure value.
Definition: urand.c:422
Definition: libran.h:70
float LRf_PDF(LR_obj *o, float x)
LRf_PDF(LR_obj *o, float x) - probability distribution function.
Definition: LRdf.c:140
int nn
Definition: libran.h:208
Definition: libran.h:65
const char const * type
Definition: libran.h:135
double LRd_lspline_CDF(LR_obj *o, double x)
LRd_lspline_CDF(LR_obj *o, double x) - double linear spline cumulative distribution function...
Definition: LRlspline.c:281
long(* ul)(LR_obj *)
Definition: libran.h:152
Definition: libran.h:66
float LRf_nexp_CDF(LR_obj *o, float x)
LRf_nexp_CDF(LR_obj *o, float x) - float negative exponential cumulative distribution function...
Definition: LRnexp.c:148
float LRf_unif_CDF(LR_obj *o, float x)
LRf_unif_CDF(LR_obj *o, float x) - float uniform cumulative distribution function.
Definition: LRunif.c:135
double LRd_gausbm_RAN(LR_obj *o)
LRd_gausbm_RAN(LR_obj *o) - double random Gaussian/Normal distribution using the Box-Muller method...
Definition: LRgaus.c:72
int i
Definition: libran.h:85
float LRf_unif_RAN(LR_obj *o)
LRf_unif_RAN(LR_obj *o) - float random uniform distribution.
Definition: LRunif.c:104
int errno
Definition: libran.h:190
Definition: libran.h:62
int n
Definition: libran.h:207
long LR_lrand(LR_obj *)
LR_lrand(LR_obj *) - returns long in range [0,LR_IRAND_LMAX].
Definition: urand.c:270
double LRd_gsn12_PDF(LR_obj *o, double x)
LRd_gsn12_PDF(LR_obj *o, double x) - double gaussian-like (simple bell curve) probablity distribution...
Definition: LRgsn.c:659
Definition: libran.h:54
float LRi_geometric_PDF(LR_obj *o, int x)
LRi_geometric_PDF(LR_obj *o, int x) - Geometric probablity (or mass) distribution function...
Definition: LRgeom.c:88
Definition: libran.h:64
double LRd_gsn2_CDF(LR_obj *o, double x)
LRd_gsn2_CDF(LR_obj *o, double x) - double gaussian-like (saw tooth) cumulative distribution function...
Definition: LRgsn.c:206
Definition: libran.h:58
double LRd_gsn12_CDF(LR_obj *o, double x)
LRd_gsn12_CDF(LR_obj *o, double x) - double gaussian-like (simple bell curve) cumulative distribution...
Definition: LRgsn.c:688
float LRf_gaus_PDF(LR_obj *o, float x)
LRf_gaus_PDF(LR_obj *o, float x) - float Gaussian/Normal probablity distribution function.
Definition: LRgaus.c:221
double(* cdfd)(LR_obj *, double)
Definition: libran.h:165
LR_obj * LR_new(LR_type t, LR_data_type d)
LR_new(LR_type t, LR_data_type d) - create the LR object and preset some default parameter values...
Definition: LRnew.c:60
long LR_lgetrand(LR_obj *)
LR_lgetrand(LR_obj *) - get the current pseudo-random number.
Definition: urand.c:392
double LRd_RAN(LR_obj *o)
LRd_RAN(LR_obj *o) - random variate generator.
Definition: LRdf.c:59
int n
Definition: libran.h:185
double LRd_PDF(LR_obj *o, double x)
LRd_PDF(LR_obj *o, double x) - probability distribution function.
Definition: LRdf.c:80
int LR_igetseed(LR_obj *)
LR_igetseed(LR_obj *) - get the current seed.
Definition: urand.c:230
float LRf_CDF(LR_obj *o, float x)
LRf_CDF(LR_obj *o, float x) - cumulative distribution function.
Definition: LRdf.c:161
double LR_dgetrand(LR_obj *)
LR_dgetrand(LR_obj *) - get the current pseudo-random number.
Definition: urand.c:405
float LRf_gsn12_CDF(LR_obj *o, float x)
LRf_gsn12_CDF(LR_obj *o, float x) - float gaussian-like (simple bell curve) cumulative distribution f...
Definition: LRgsn.c:770
int LR_vset(LR_obj *o, char *x, va_list ap)
LR_vset(LR_obj *o, char *x, va_list ap) - read and parse options.
Definition: LRset.c:75
the binning object - for tallying results
Definition: libran.h:184
int LRi_geometric_RAN(LR_obj *o)
LRi_geometric_RAN(LR_obj *o) - int Geometric distributed variate. Default values: probability of succ...
Definition: LRgeom.c:68
float LRf_uinvcdf_CDF(LR_obj *o, float x)
LRf_uinvcdf_CDF(LR_obj *o, float x) - float User supplied cumulative distribution function...
Definition: LRuinvcdf.c:666
float LRf_gsn12_PDF(LR_obj *o, float x)
LRf_gsn12_PDF(LR_obj *o, float x) - float gaussian-like (simple bell curve) probablity distribution f...
Definition: LRgsn.c:741
float LRf_lspline_RAN(LR_obj *o)
LRf_lspline_RAN(LR_obj *o) - float random linear spline distribution.
Definition: LRlspline.c:318
float LRf_cauchy_PDF(LR_obj *o, float x)
LRf_cauchy_PDF(LR_obj *o, float x) - float Cauchy/Lorentz probablity distribution function...
Definition: LRcauchy.c:166
float LRf_gsn2_PDF(LR_obj *o, float x)
LRf_gsn2_PDF(LR_obj *o, float x) - float gaussian-like (saw tooth) probablity distribution function...
Definition: LRgsn.c:248
double(* ud)(LR_obj *)
Definition: libran.h:154
double LRd_cauchy_CDF(LR_obj *o, double x)
LRd_cauchy_CDF(LR_obj *o, double x) - double Cauchy/Lorentz cumulative distribution function...
Definition: LRcauchy.c:117
float LR_frand(LR_obj *)
LR_frand(LR_obj *) - returns float in range [0.0,1.0)
Definition: urand.c:193
float LRf_uinvcdf_PDF(LR_obj *o, float x)
LRf_uinvcdf_PDF(LR_obj *o, float x) - float probability distribution function approximated from the u...
Definition: LRuinvcdf.c:611
double LRd_gsn2_RAN(LR_obj *o)
LRd_gsn2_RAN(LR_obj *o) - double random g2 gaussian-like (saw tooth) distribution.
Definition: LRgsn.c:169
int LR_aux_new(LR_obj *o, int n)
LR_aux_new(LR_obj *o, int n) - initialize a new auxiliary object.
Definition: LRdf.c:241
int LR_pcs_rm(LR_obj *o)
LR_pcs_rm(LR_obj *o) - strip out the LR_pcs object part of LR_obj.
Definition: LRpiece.c:122
double LRd_gsn4_PDF(LR_obj *o, double x)
LRd_gsn4_PDF(LR_obj *o, double x) - double gaussian-like (simple bell curve) probablity distribution ...
Definition: LRgsn.c:388
float LRf_gsn12_RAN(LR_obj *o)
LRf_gsn12_RAN(LR_obj *o) - float random g12 gaussian-like distribution closely matches a Gaussian/Nor...
Definition: LRgsn.c:721
long l
Definition: libran.h:84
int LR_bin_set(LR_bin *b, double x)
LR_bin_set(LR_bin *b, double x) - add bin boundary.
Definition: LRbin.c:137
double LRd_gsn12_RAN(LR_obj *o)
LRd_gsn12_RAN(LR_obj *o) - double random g12 gaussian-like distribution closely matches a Gaussian/No...
Definition: LRgsn.c:639
float LRf_gsn4_PDF(LR_obj *o, float x)
LRf_gsn4_PDF(LR_obj *o, float x) - float gaussian-like (simple bell curve) probablity distribution fu...
Definition: LRgsn.c:466
float LRf_erlang_CDF(LR_obj *o, float x)
LRf_erlang_CDF(LR_obj *o, float x) - Erlang distribution cumulative distribution function.
Definition: LRerlang.c:194
A special object for using a user defined CDF.
Definition: libran.h:238
float LRf_gaus_CDF(LR_obj *o, float x)
LRf_gaus_CDF(LR_obj *o, float x) - float Gaussian/Normal cumulative distribution function.
Definition: LRgaus.c:238
long c
Definition: libran.h:187
int LR_rm(LR_obj **o)
LR_rm(LR_obj **o) - destroy the LR object and release allocated memory.
Definition: LRnew.c:432
char * LRstrerrno(int LRerrno)
LRstrerrno(int LRerrno) - return the errno code string for the given LibRan errno.
Definition: LRerror.c:112
float LRf_gausbm_RAN(LR_obj *o)
LRf_gausbm_RAN(LR_obj *o) - float random Gaussian/Normal distribution using the Box-Muller method...
Definition: LRgaus.c:165
LR_type t
Definition: libran.h:136
float q
Definition: libran.h:146
double LRd_gsn2_PDF(LR_obj *o, double x)
LRd_gsn2_PDF(LR_obj *o, double x) - double gaussian-like (saw tooth) probablity distribution function...
Definition: LRgsn.c:183
double * c
Definition: libran.h:210
double LRd_piece_CDF(LR_obj *o, double x)
LRd_piece_CDF(LR_obj *o, double x) - double piecewise uniform cumulative distribution function...
Definition: LRpiece.c:332
Definition: libran.h:68
double LRd_lspline_RAN(LR_obj *o)
LRd_lspline_RAN(LR_obj *o) - double random linear spline distribution random variate.
Definition: LRlspline.c:209
Definition: libran.h:69
double LRd_uinvcdf_RAN(LR_obj *o)
LRd_uinvcdf_RAN(LR_obj *o) - double random variate via inverse method of the UserCDF() fn...
Definition: LRuinvcdf.c:269
LR_val s
Definition: libran.h:141
double LRd_piece_RAN(LR_obj *o)
LRd_piece_RAN(LR_obj *o) - double random piecewise uniform distribution random variate.
Definition: LRpiece.c:277
double(* pdfd)(LR_obj *, double)
Definition: libran.h:161
int flags
Definition: libran.h:213
int LR_lspl_new(LR_obj *o, int n)
LR_lspl_new(LR_obj *o, int n) - create a new linear spline object.
Definition: LRlspline.c:88
LR_val iy0
Definition: libran.h:149
float LRi_binomial_PDF(LR_obj *o, int x)
LRi_binomial_PDF(LR_obj *o, int k) - Binomial probablity (or mass) distribution function.
Definition: LRbinom.c:108
long LR_lgetseed(LR_obj *)
LR_lgetseed(LR_obj *) - get the current seed.
Definition: urand.c:379
double norm
Definition: libran.h:212
float(* cdfi)(LR_obj *, int)
Definition: libran.h:166
int errno
Definition: libran.h:169
LR_val a
Definition: libran.h:138
int(* rni)(LR_obj *)
Definition: libran.h:158
double d
Definition: libran.h:87
double LRd_gaus_PDF(LR_obj *o, double x)
LRd_gaus_PDF(LR_obj *o, double x) - double Gaussian/Normal probablity distribution function...
Definition: LRgaus.c:129
double LRd_cauchymar_RAN(LR_obj *o)
LRd_cauchymar_RAN(LR_obj *o) - double random Cauchy/Lorentz distribution using the polar method and t...
Definition: LRcauchy.c:84
float f
Definition: libran.h:86
float LRf_uinvcdf_RAN(LR_obj *o)
LRf_uinvcdf_RAN(LR_obj *o) - float random variate via inverse method of the UserCDF() fn...
Definition: LRuinvcdf.c:551
float(* uf)(LR_obj *)
Definition: libran.h:153
void LRperror(char *str, int LRerrno)
LRperror(char *str, int LRerrno) - print out explanatory error message to stderr. ...
Definition: LRerror.c:157
void LR_isetseed(LR_obj *, int ity)
LR_isetseed(LR_obj *, int X) - set the seed to X.
Definition: urand.c:212
Definition: libran.h:61
float LRf_unif_PDF(LR_obj *o, float x)
LRf_unif_PDF(LR_obj *o, float x) - float uniform probablity distribution function.
Definition: LRunif.c:118
int LR_lspl_rm(LR_obj *o)
LR_lspl_rm(LR_obj *o) - strip out the LR_lspl object part of LR_obj.
Definition: LRlspline.c:100
float LRf_piece_PDF(LR_obj *o, float x)
LRf_piece_PDF(LR_obj *o, float x) - float piecewise uniform probablity distribution function...
Definition: LRpiece.c:388
int k
Definition: libran.h:143
float LRi_geometric_CDF(LR_obj *o, int x)
LRi_geometric_CDF(LR_obj *o, int x) - Geometric distribution cumulative distribution function...
Definition: LRgeom.c:112
int nn
Definition: libran.h:186
Definition: libran.h:63
float LRf_piece_CDF(LR_obj *o, float x)
LRf_piece_CDF(LR_obj *o, float x) - float piecewise uniform cumulative distribution function...
Definition: LRpiece.c:415
float(* rnf)(LR_obj *)
Definition: libran.h:156
double LRd_cauchy_PDF(LR_obj *o, double x)
LRd_cauchy_PDF(LR_obj *o, double x) - double Cauchy/Lorentz probablity distribution function...
Definition: LRcauchy.c:103
int LR_bin_add(LR_bin *b, double x)
LR_bin_add(LR_bin *b, double x) - collect value to be binned.
Definition: LRbin.c:178
double LRd_erlang_PDF(LR_obj *o, double x)
LRd_erlang_PDF(LR_obj *o, double x) - Erlang distribution probablity distribution function...
Definition: LRerlang.c:87
int(* ui)(LR_obj *)
Definition: libran.h:151
char * LRstrerror(int LRerrno)
LRstrerror(int LRerrno) - return some explanatory text regarding the given LibRan errno...
Definition: LRerror.c:71
double LRd_unif_CDF(LR_obj *o, double x)
LRd_unif_CDF(LR_obj *o, double x) - double uniform cumulative distribution function.
Definition: LRunif.c:86
float LRf_nexp_PDF(LR_obj *o, float x)
LRf_nexp_PDF(LR_obj *o, float x) - float negative exponential probablity distribution function...
Definition: LRnexp.c:130
int LR_set_all(LR_obj *o, char *x,...)
LR_set_all(LR_obj *o, char *x, ...) - set all given LR object parameters.
Definition: LRset.c:194
double LRd_cauchy_RAN(LR_obj *o)
LRd_cauchy_RAN(LR_obj *o) - double random Cauchy/Lorentz distribution using the inversion method on t...
Definition: LRcauchy.c:71
float LRf_nexp_RAN(LR_obj *o)
LRf_nexp_RAN(LR_obj *o) - float random negative exponential distribution using the inversion method...
Definition: LRnexp.c:112
int LR_lspl_set(LR_obj *o, double x, double p)
LR_lspl_set(LR_obj *o, double x) - add interval boundary (will order internally). ...
Definition: LRlspline.c:128
int n
Definition: libran.h:144
double LRd_uinvcdf_PDF(LR_obj *o, double x)
LRd_uinvcdf_PDF(LR_obj *o, double x) - double probability distribution function approximated from the...
Definition: LRuinvcdf.c:329
int LR_pcs_new(LR_obj *o, int n)
LR_pcs_new(LR_obj *o, int n) - create a new piecewise uniform object set of segments.
Definition: LRpiece.c:78
double LRd_gaus_CDF(LR_obj *o, double x)
LRd_gaus_CDF(LR_obj *o, double x) - double Gaussian/Normal cumulative distribution function...
Definition: LRgaus.c:146
double LRd_gausmar_RAN(LR_obj *o)
LRd_gausmar_RAN(LR_obj *o) - double random Gaussian/Normal distribution using the Marsaglia method wi...
Definition: LRgaus.c:101
float LRf_erlang_RAN(LR_obj *o)
LRf_erlang_RAN(LR_obj *o) - float random negative exponential distribution using the inversion method...
Definition: LRerlang.c:142
float LRf_cauchy_RAN(LR_obj *o)
LRf_cauchy_RAN(LR_obj *o) - float random Cauchy/Lorentz distribution using the inversion method...
Definition: LRcauchy.c:134
the fundamental LibRan random variate distribution object
Definition: libran.h:134
Definition: libran.h:67
float LRf_gsn4_RAN(LR_obj *o)
LRf_gsn4_RAN(LR_obj *o) - float random g4 gaussian-like (simple bell curve) distribution.
Definition: LRgsn.c:451
LR_val m
Definition: libran.h:140
double * bdrs
Definition: libran.h:209
double LRd_erlang_RAN(LR_obj *o)
LRd_erlang_RAN(LR_obj *o) - double random negative exponential distribution using the inversion metho...
Definition: LRerlang.c:66
double * bdrs
Definition: libran.h:188
double LRd_uinvcdf_CDF(LR_obj *o, double x)
LRd_uinvcdf_CDF(LR_obj *o, double x) - double User supplied cumulative distribution function...
Definition: LRuinvcdf.c:384
double LRd_lspline_PDF(LR_obj *o, double x)
LRd_lspline_PDF(LR_obj *o, double x) - double linear spline probablity distribution function...
Definition: LRlspline.c:247
float LRi_binomial_CDF(LR_obj *o, int x)
LRi_binomial_CDF(LR_obj *o, int k) - Binomial distribution cumulative distribution function...
Definition: LRbinom.c:133
int LR_lspl_norm(LR_obj *o)
LR_lspl_norm(LR_obj *o) - normalize the interval scale factors.
Definition: LRlspline.c:147
float LRi_poisson_PDF(LR_obj *o, int x)
LRi_poisson_PDF(LR_obj *o, int x) - Poisson probablity (or mass) distribution function.
Definition: LRpoisson.c:91
Definition: libran.h:99
int LR_bin_rm(LR_bin **b)
LR_bin_rm(LR_bin **b) - remove binning object.
Definition: LRbin.c:116
float(* pdfi)(LR_obj *, int)
Definition: libran.h:162
double LRd_nexp_CDF(LR_obj *o, double x)
LRd_nexp_CDF(LR_obj *o, double x) - double negative exponential cumulative distribution function...
Definition: LRnexp.c:93
float LRf_gsn2_RAN(LR_obj *o)
LRf_gsn2_RAN(LR_obj *o) - float random g2 gaussian-like (saw tooth) distribution. ...
Definition: LRgsn.c:234
void LR_lsetseed(LR_obj *, long lty)
LR_lsetseed(LR_obj *, long X) - set the seed to X.
Definition: urand.c:361
float LRi_PDF(LR_obj *o, int x)
LRi_PDF(LR_obj *o, int x) - probability distribution function.
Definition: LRdf.c:200