50 for (
unsigned int i = 1; i < 25; i += 2) {
51 Sum += Sign * Power / Fact;
53 Fact *= (i + 1) * (i + 2);
68 for (
unsigned int i = 2; i < 25; i += 2) {
72 Sum += Sign * Power / Fact;
100 E = 2.71828182845905;
115 L = (P / (
exp(N - 1.0)));
134 if (gamma_in > 1.0 + ep)
136 return ((gamma_in - 1) *
gamma(gamma_in - 1));
141 if ((gamma_in - ep < 1.0) && (gamma_in + ep > 1.0))
143 else if ((gamma_in - ep < 0.5) && (gamma_in + ep > 0.5))
146 return std::numeric_limits<Mdouble>::quiet_NaN();
157 Mdouble mainfactor = pow(x, k / 2.0 - 1) *
exp(x / -2.0);
159 return mainfactor / prefactor;
173 const int num_steps_per_unit = 100;
176 long int num_steps =
static_cast<int>(num_steps_per_unit * x_max);
178 for (
int i = 0; i < num_steps; i++)
180 x = x_max / num_steps * (i + 0.5);
183 return 1.0 - sum * x_max / num_steps;
189 if (std::abs(max - min) < endCondition)
191 return 0.5 * (min + max);
193 std::cout <<
"Min=" << min <<
" Max=" << max <<
" diff=" << max - min << std::endl;
194 Mdouble resphi = 2 - 0.5 * (1 + std::sqrt(5));
196 if (max - cur > cur - min)
198 x = cur + resphi * (max - cur);
202 x = cur - resphi * (cur - min);
204 if(std::isnan(curVal))
205 curVal =
function(cur);
209 if (max - cur > cur - min)
220 if (max - cur > cur - min)
233 return std::abs(v1 - v2) <= absError;
254 b0 = x * b1 - b2 + *p++;
258 return (0.5 * (b0 - b2));
266 -4.415341646479339379501E-18,
267 3.330794518822238097831E-17,
268 -2.431279846547954693591E-16,
269 1.715391285555133030611E-15,
270 -1.168533287799345168081E-14,
271 7.676185498604935616881E-14,
272 -4.856446783111929460901E-13,
273 2.955052663129639834611E-12,
274 -1.726826291441555707231E-11,
275 9.675809035373236912241E-11,
276 -5.189795601635262906661E-10,
277 2.659823724682386650351E-9,
278 -1.300025009986248042121E-8,
279 6.046995022541918949321E-8,
280 -2.670793853940611733911E-7,
281 1.117387539120103718151E-6,
282 -4.416738358458750563591E-6,
283 1.644844807072889708931E-5,
284 -5.754195010082103703981E-5,
285 1.885028850958416557291E-4,
286 -5.763755745385823658851E-4,
287 1.639475616941335798421E-3,
288 -4.324309995050575944301E-3,
289 1.054646039459499831831E-2,
290 -2.373741480589946881561E-2,
291 4.930528423967070848781E-2,
292 -9.490109704804764442101E-2,
293 1.716209015222087753491E-1,
294 -3.046826723431983986831E-1,
295 6.767952744094760849951E-1
301 -7.233180487874753954561E-18,
302 -4.830504485944182071261E-18,
303 4.465621420296759999011E-17,
304 3.461222867697461093101E-17,
305 -2.827623980516583484941E-16,
306 -3.425485619677219134621E-16,
307 1.772560133056526383601E-15,
308 3.811680669352622420751E-15,
309 -9.554846698828307648701E-15,
310 -4.150569347287222086631E-14,
311 1.540086217521409826911E-14,
312 3.852778382742142701141E-13,
313 7.180124451383666233671E-13,
314 -1.794178531506806117781E-12,
315 -1.321581184044771311881E-11,
316 -3.149916527963241364541E-11,
317 1.188914710784643834241E-11,
318 4.940602388224969589101E-10,
319 3.396232025708386345151E-9,
320 2.266668990498178064591E-8,
321 2.048918589469063741831E-7,
322 2.891370520834756482971E-6,
323 6.889758346916823984261E-5,
324 3.369116478255694089901E-3,
325 8.044904110141088316081E-1
337 return (
chebyshev(32.0 / x - 2.0, B, 25) / sqrt(x));
Mdouble X
the vector components
Mdouble chi_squared_prob(const Mdouble x, const unsigned int k)
This is the function which actually gives the probability back using a chi squared test...
Mdouble goldenSectionSearch(Mdouble(*function)(const Mdouble), Mdouble min, Mdouble cur, Mdouble max, Mdouble endCondition, Mdouble curVal=std::numeric_limits< Mdouble >::quiet_NaN())
This function performs a golden section search to find the location of the minimum of a function...
Mdouble exp(Mdouble Exponent)
Mdouble log(Mdouble Power)
bool isEqual(Mdouble v1, Mdouble v2, Mdouble absError)
Compares the difference of two Mdouble with an absolute error, useful in UnitTests.
Mdouble I0_exp(Mdouble x)
Mdouble chebyshev(Mdouble x, const Mdouble coef[], int N)
Namespace for evaluating the zeroth modified Bessel function of the first kind, I0(x), required in StatisticsPoint.hcc.
Mdouble gamma(Mdouble gamma_in)
This is the gamma function returns the true value for the half integer value.
Mdouble chi_squared(const Mdouble x, const unsigned int k)
This is a chi_squared function return the value x and degrees of freedom k.
Implementation of a 3D vector (by Vitaliy).