37 #define STARTFRACTION 20
40 #define SQRTI2PI 0.398942280401432677939946059934382
43 #define HL2PI 0.918938533204672741780329736405618
45 #define MIN_WAHRSCHEINLICHKEIT 1e-10
54 return std::exp(l)/(1.0+std::exp(l));
58 return std::log(p/(1.0-p));
80 n = (int) std::floor(6.0 - a + 0.0001);
84 g = (1.0 - g*(1.0/30.0 - g*(1.0/105.0 - g*(1.0/140.0 - g/99.0))))/(12.0*a);
85 g = g + ( (a - 0.5)*log(a) - a +
HL2PI );
93 static double dgamma(
double x1,
double x2) {
96 double alpha,y, CF, t, gamma;
103 t = y*(1.0-k-alpha)/(alpha+2.0*k-1.0+k*y/(alpha+2*k));
105 t = y*(1.0-k-alpha)/(alpha+2.0*k-1.0+k*y/(alpha+2*k+t));
106 CF = 1.0 - y/(alpha+1.0+y/(alpha+2.0+t));
107 gamma = std::exp(alpha*log(y)-y-
log_gamma(alpha+1.0)-log(CF));
111 t = (k-alpha)/(y+k/(1.0+t));
112 CF = 1.0 + (1-alpha)/(y+1.0/(1.0+t));
113 gamma = (alpha-1.0)*std::log(y)-y-
log_gamma(alpha)-log(CF);
115 if(gamma<-100) gamma=1.0;
116 else gamma = 1.0 - std::exp(gamma);
126 if (df<=0)
throw std::range_error(
"df too low");
129 p=
dgamma(df/2.0, chi/2.0);
137 if (df<=0)
throw std::range_error(
"df too low");
140 p=
dgamma(df/2.0, chi/2.0);
147 if (df<=0)
throw std::range_error(
"df too low");
150 p=
dgamma(df/2.0, chi/2.0);
162 double t,t1,a,z1,w,p1,zz,p;
170 w = 1.0-1.0/(zz+3.0-1.0/(0.22*zz+0.704));
191 p = p *
SQRTI2PI * a * std::exp(-z1/2.0);
193 if (z < 0.0)
return (0.5 + p);
194 else return (0.5 - p);
199 double p, unten, oben, mitte, pu, po, pm;
203 if (p<0.005) p = 0.005;
204 if (p>0.995) p = 0.995;
217 for (iter=0; iter<
ITERMAX; iter++) {
218 mitte = (unten+oben)/2.0;
249 static double Z(
double r) {
250 return .5 * std::log( (1.0+r)/(1.0-r) );
253 return (std::exp(2*Z)-1) / (std::exp(2*Z)+1);