LibRan  0.1
Pseudo-random number distribution generator
LRnexp.c
Go to the documentation of this file.
1 
37 /*
38  * Copyright 2019 R.K. Owen, Ph.D.
39  * License see lgpl.md (Gnu Lesser General Public License)
40  */
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44 
45 #include <math.h>
46 #include "libran.h"
47 
48 /* double */
57 double LRd_nexp_RAN(LR_obj *o) {
58  double u, zero = 0.0, one = 1.0;
59 
60  do {
61  u = o->ud(o);
62  } while (u == zero);
63 
64  return - o->m.d*log(u);
65 }
66 
75 double LRd_nexp_PDF(LR_obj *o, double x) {
76  double zero = 0.0, one = 1.0;
77  if (isnan(o->s.d))
78  o->s.d = one/o->m.d;
79 
80  if (x < zero) return zero;
81 
82  return o->s.d * exp(- o->s.d * x);
83 }
84 
93 double LRd_nexp_CDF(LR_obj *o, double x) {
94  double zero = 0.0, one = 1.0;
95  if (isnan(o->s.d))
96  o->s.d = one/o->m.d;
97 
98  if (x < zero) return zero;
99 
100  return one - exp(- o->s.d * x);
101 }
102 
103 /* float */
112 float LRf_nexp_RAN(LR_obj *o) {
113  float u, zero = 0.0, one = 1.0;
114 
115  do {
116  u = o->uf(o);
117  } while (u == zero);
118 
119  return - o->m.f*log(u);
120 }
121 
130 float LRf_nexp_PDF(LR_obj *o, float x) {
131  float zero = 0.0, one = 1.0;
132  if (isnan(o->s.f))
133  o->s.f = one/o->m.f;
134 
135  if (x < zero) return zero;
136 
137  return o->s.f * expf(- o->s.f * x);
138 }
139 
148 float LRf_nexp_CDF(LR_obj *o, float x) {
149  float zero = 0.0, one = 1.0;
150  if (isnan(o->s.f))
151  o->s.f = one/o->m.f;
152 
153  if (x < zero) return zero;
154 
155  return one - expf(- o->s.f * x);
156 }
157 
158 #ifdef __cplusplus
159 }
160 #endif
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
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_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
double(* ud)(LR_obj *)
Definition: libran.h:154
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
LR_val s
Definition: libran.h:141
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
double d
Definition: libran.h:87
float f
Definition: libran.h:86
float(* uf)(LR_obj *)
Definition: libran.h:153
The LibRan common header file.
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
the fundamental LibRan random variate distribution object
Definition: libran.h:134
LR_val m
Definition: libran.h:140