LibRan  0.1
Pseudo-random number distribution generator
LRcauchy.c
Go to the documentation of this file.
1 
51 /*
52  * Copyright 2019 R.K. Owen, Ph.D.
53  * License see lgpl.md (Gnu Lesser General Public License)
54  */
55 #ifdef __cplusplus
56 extern "C" {
57 #endif
58 
59 #include <math.h>
60 #include "libran.h"
61 
62 /* double */
71 double LRd_cauchy_RAN(LR_obj *o) {
72  return o->m.d + o->s.d*tan(M_PI * o->ud(o));
73 }
74 
85  double zero = 0.0, one = 1.0, two = 2.0;
86  double s, z1, z2;
87  do {
88  z1 = two*o->ud(o) - one;
89  z2 = two*o->ud(o) - one;
90  s = z1*z1 + z2*z2;
91  } while (s > one || z2 == zero);
92 
93  return o->m.d + o->s.d*z1/z2;
94 }
95 
103 double LRd_cauchy_PDF(LR_obj *o, double x) {
104 
105  x -= o->m.d;
106 
107  return o->s.d * M_1_PI / (x*x + o->s.d * o->s.d);
108 }
109 
117 double LRd_cauchy_CDF(LR_obj *o, double x) {
118  double half = 0.5;
119 
120  x -= o->m.d;
121 
122  return half + M_1_PI * atan(x/o->s.d);
123 }
124 
125 /* float */
135  return o->m.f + o->s.f*tanf(M_PI * o->uf(o));
136 }
137 
148  float zero = 0.0, one = 1.0, two = 2.0;
149  float s, z1, z2;
150  do {
151  z1 = two*o->uf(o) - one;
152  z2 = two*o->uf(o) - one;
153  s = z1*z1 + z2*z2;
154  } while (s > one || z2 == zero);
155 
156  return o->m.f + o->s.f*z1/z2;
157 }
158 
166 float LRf_cauchy_PDF(LR_obj *o, float x) {
167 
168  x -= o->m.f;
169 
170  return o->s.f * M_1_PI / (x*x + o->s.f * o->s.f);
171 }
172 
180 float LRf_cauchy_CDF(LR_obj *o, float x) {
181  float half = 0.5;
182 
183  x -= o->m.f;
184 
185  return half + M_1_PI * atanf(x/o->s.f);
186 }
187 
188 #ifdef __cplusplus
189 }
190 #endif
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 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_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 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
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
double(* ud)(LR_obj *)
Definition: libran.h:154
LR_val s
Definition: libran.h:141
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_cauchy_RAN(LR_obj *o)
LRf_cauchy_RAN(LR_obj *o) - float random Cauchy/Lorentz distribution using the inversion method...
Definition: LRcauchy.c:134
double d
Definition: libran.h:87
float f
Definition: libran.h:86
float(* uf)(LR_obj *)
Definition: libran.h:153
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
The LibRan common header file.
the fundamental LibRan random variate distribution object
Definition: libran.h:134
LR_val m
Definition: libran.h:140