LibRan  0.1
Pseudo-random number distribution generator
LRdf.c
Go to the documentation of this file.
1 
38 /*
39  * Copyright 2019 R.K. Owen, Ph.D.
40  * License see lgpl.md (Gnu Lesser General Public License)
41  */
42 #ifdef __cplusplus
43 extern "C" {
44 #endif
45 
46 #include <math.h>
47 #include "libran.h"
48 
59 double LRd_RAN(LR_obj *o) {
60  if (o->d != LR_double) {
62  return NAN;
63  }
64  return o->rnd(o);
65 }
66 
80 double LRd_PDF(LR_obj *o, double x) {
81  if (o->d != LR_double) {
83  return NAN;
84  }
85  return o->pdfd(o,x);
86 }
87 
101 double LRd_CDF(LR_obj *o, double x) {
102  if (o->d != LR_double) {
104  return NAN;
105  }
106  return o->cdfd(o,x);
107 }
108 
119 float LRf_RAN(LR_obj *o) {
120  if (o->d != LR_float) {
122  return NAN;
123  }
124  return o->rnf(o);
125 }
126 
140 float LRf_PDF(LR_obj *o, float x) {
141  if (o->d != LR_float) {
143  return NAN;
144  }
145  return o->pdff(o,x);
146 }
147 
161 float LRf_CDF(LR_obj *o, float x) {
162  if (o->d != LR_float) {
164  return NAN;
165  }
166  return o->cdff(o,x);
167 }
168 
179 int LRi_RAN(LR_obj *o) {
180  if (o->d != LR_int) {
182  return NAN;
183  }
184  return o->rni(o);
185 }
186 
200 float LRi_PDF(LR_obj *o, int x) {
201  if (o->d != LR_int) {
203  return NAN;
204  }
205  return o->pdfi(o,x);
206 }
207 
221 float LRi_CDF(LR_obj *o, int x) {
222  if (o->d != LR_int) {
224  return NAN;
225  }
226  return o->cdfi(o,x);
227 }
228 
241 int LR_aux_new(LR_obj *o, int n) {
242  if (!o->aux)
243  return o->errno = LRerr_NoAuxiliaryObject;
244  if (!(((LR_pcs *) o->aux)->new))
245  return o->errno = LRerr_BadAuxSetup;
246 
247  return ((LR_pcs *) o->aux)->new(o,n);
248 }
249 
260 int LR_aux_rm(LR_obj *o) {
261  if (!o->aux)
262  return o->errno = LRerr_NoAuxiliaryObject;
263  if (!(((LR_pcs *) o->aux)->rm))
264  return o->errno = LRerr_BadAuxSetup;
265 
266  return ((LR_pcs *) o->aux)->rm(o);
267 }
268 
282 int LR_aux_set(LR_obj *o, double x, double p) {
283  if (!o->aux)
284  return o->errno = LRerr_NoAuxiliaryObject;
285  if (!(((LR_pcs *) o->aux)->set))
286  return o->errno = LRerr_BadAuxSetup;
287 
288  return ((LR_pcs *) o->aux)->set(o,x,p);
289 }
290 
302  int ret;
303  if (!o->aux)
304  return o->errno = LRerr_NoAuxiliaryObject;
305  if (!(((LR_pcs *) o->aux)->normalize))
306  return o->errno = LRerr_BadAuxSetup;
307 
308  return ((LR_pcs *) o->aux)->normalize(o);
309 }
310 
311 #ifdef __cplusplus
312 }
313 #endif
float(* cdff)(LR_obj *, float)
Definition: libran.h:164
LR_data_type d
Definition: libran.h:137
float(* pdff)(LR_obj *, float)
Definition: libran.h:160
double LRd_CDF(LR_obj *o, double x)
LRd_CDF(LR_obj *o, double x) - cumulative distribution function.
Definition: LRdf.c:101
#define LRerr_BadAuxSetup
Definition: libran.h:38
void * aux
Definition: libran.h:168
float LRi_PDF(LR_obj *o, int x)
LRi_PDF(LR_obj *o, int x) - probability distribution function.
Definition: LRdf.c:200
double LRd_RAN(LR_obj *o)
LRd_RAN(LR_obj *o) - random variate generator.
Definition: LRdf.c:59
float LRf_CDF(LR_obj *o, float x)
LRf_CDF(LR_obj *o, float x) - cumulative distribution function.
Definition: LRdf.c:161
double(* rnd)(LR_obj *)
Definition: libran.h:157
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_RAN(LR_obj *o)
LRf_RAN(LR_obj *o) - random variate generator.
Definition: LRdf.c:119
A special object for defining some of the random variate distributions.
Definition: libran.h:206
double LRd_PDF(LR_obj *o, double x)
LRd_PDF(LR_obj *o, double x) - probability distribution function.
Definition: LRdf.c:80
int LRi_RAN(LR_obj *o)
LRi_RAN(LR_obj *o) - random variate generator.
Definition: LRdf.c:179
double(* cdfd)(LR_obj *, double)
Definition: libran.h:165
#define LRerr_BadDataType
Definition: libran.h:34
int LR_aux_norm(LR_obj *o)
LR_aux_norm(LR_obj *o) - process given intervals and normalize values.
Definition: LRdf.c:301
double(* pdfd)(LR_obj *, double)
Definition: libran.h:161
float LRi_CDF(LR_obj *o, int x)
LRi_CDF(LR_obj *o, int x) - cumulative distribution function.
Definition: LRdf.c:221
float(* cdfi)(LR_obj *, int)
Definition: libran.h:166
int errno
Definition: libran.h:169
int(* rni)(LR_obj *)
Definition: libran.h:158
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_aux_rm(LR_obj *o)
LR_aux_rm(LR_obj *o) - remove the auxiliary object.
Definition: LRdf.c:260
float(* rnf)(LR_obj *)
Definition: libran.h:156
#define LRerr_NoAuxiliaryObject
Definition: libran.h:36
The LibRan common header file.
float LRf_PDF(LR_obj *o, float x)
LRf_PDF(LR_obj *o, float x) - probability distribution function.
Definition: LRdf.c:140
the fundamental LibRan random variate distribution object
Definition: libran.h:134
Definition: libran.h:99
float(* pdfi)(LR_obj *, int)
Definition: libran.h:162