6#include <boost/serialization/export.hpp>
7#include <boost/archive/binary_oarchive.hpp>
8#include <boost/archive/binary_iarchive.hpp>
80 while (1.0 < (
double) (1.0 + r)) {
150 if (x <= 0.0 || y <= 0.0) {
152 cout <<
"BETA - Fatal error!\n";
153 cout <<
" Both X and Y must be greater than 0.\n";
221 double tol = 1.0E-07;
227 cout <<
"BETA_INC - Fatal error!\n";
228 cout <<
" A <= 0.\n";
234 cout <<
"BETA_INC - Fatal error!\n";
235 cout <<
" B <= 0.\n";
242 }
else if (1.0 <= x) {
251 if (a < (a + b) * x) {
270 ns =
static_cast<int>( qq + cx * (a + b));
277 temp = qq -
static_cast<double> (i);
289 cout <<
"BETA_INC - Fatal error!\n";
290 cout <<
" Maximum number of iterations exceeded!\n";
291 cout <<
" IT_MAX = " << it_max <<
"\n";
296 term = term * temp * rx / (pp +
static_cast<double>( i ));
297 value = value + term;
300 if (temp <= tol && temp <= tol * value) {
309 temp = qq -
static_cast<double> (i);
321 value = value * exp(pp *
log(xx)
322 + (qq - 1.0) *
log(cx)) / (
beta(a, b) * pp);
371 if (x < 0.0 || 1.0 < x) {
374 pdf = pow(x, (a - 1.0)) * pow((1.0 - x), (b - 1.0)) /
beta(a, b);
410 }
else if (x <= 1.0) {
422 double p_low, p_high, p_est, F_est;
424 int max_count = 1000;
430 while (fabs(err) > err_max && max_count != 0) {
431 p_est = 0.5 * (p_low + p_high);
435 p_low = fmax(0.0, p_low + 0.5 * fabs(p_est - p_low));
437 p_high = fmin(1.0, p_high - 0.5 * fabs(p_high - p_est));
543 -5.952379913043012E-04,
544 7.93650793500350248E-04,
545 -2.777777777777681622553E-03,
546 8.333333333333333331554247E-02,
549 double d1 = -5.772156649015328605195174E-01;
550 double d2 = 4.227843350984671393993777E-01;
551 double d4 = 1.791759469228055000094023;
552 double frtbig = 1.42E+09;
555 4.945235359296727046734888,
556 2.018112620856775083915565E+02,
557 2.290838373831346393026739E+03,
558 1.131967205903380828685045E+04,
559 2.855724635671635335736389E+04,
560 3.848496228443793359990269E+04,
561 2.637748787624195437963534E+04,
562 7.225813979700288197698961E+03};
564 4.974607845568932035012064,
565 5.424138599891070494101986E+02,
566 1.550693864978364947665077E+04,
567 1.847932904445632425417223E+05,
568 1.088204769468828767498470E+06,
569 3.338152967987029735917223E+06,
570 5.106661678927352456275255E+06,
571 3.074109054850539556250927E+06};
573 1.474502166059939948905062E+04,
574 2.426813369486704502836312E+06,
575 1.214755574045093227939592E+08,
576 2.663432449630976949898078E+09,
577 2.940378956634553899906876E+010,
578 1.702665737765398868392998E+011,
579 4.926125793377430887588120E+011,
580 5.606251856223951465078242E+011};
581 double pnt68 = 0.6796875;
583 6.748212550303777196073036E+01,
584 1.113332393857199323513008E+03,
585 7.738757056935398733233834E+03,
586 2.763987074403340708898585E+04,
587 5.499310206226157329794414E+04,
588 6.161122180066002127833352E+04,
589 3.635127591501940507276287E+04,
590 8.785536302431013170870835E+03};
592 1.830328399370592604055942E+02,
593 7.765049321445005871323047E+03,
594 1.331903827966074194402448E+05,
595 1.136705821321969608938755E+06,
596 5.267964117437946917577538E+06,
597 1.346701454311101692290052E+07,
598 1.782736530353274213975932E+07,
599 9.533095591844353613395747E+06};
601 2.690530175870899333379843E+03,
602 6.393885654300092398984238E+05,
603 4.135599930241388052042842E+07,
604 1.120872109616147941376570E+09,
605 1.488613728678813811542398E+010,
606 1.016803586272438228077304E+011,
607 3.417476345507377132798597E+011,
608 4.463158187419713286462081E+011};
610 double sqrtpi = 0.9189385332046727417803297;
611 double xbig = 4.08E+36;
621 if (x <= 0.0 || xbig < x) {
627 }
else if (x <= 1.5) {
633 xm1 = (x - 0.5) - 0.5;
636 if (x <= 0.5 || pnt68 <= x) {
640 for (i = 0; i < 8; i++) {
641 xnum = xnum * xm1 + p1[i];
642 xden = xden * xm1 + q1[i];
645 res = corr + (xm1 * (d1 + xm1 * (xnum / xden)));
647 xm2 = (x - 0.5) - 0.5;
650 for (i = 0; i < 8; i++) {
651 xnum = xnum * xm2 + p2[i];
652 xden = xden * xm2 + q2[i];
655 res = corr + xm2 * (d2 + xm2 * (xnum / xden));
658 }
else if (x <= 4.0) {
662 for (i = 0; i < 8; i++) {
663 xnum = xnum * xm2 + p2[i];
664 xden = xden * xm2 + q2[i];
667 res = xm2 * (d2 + xm2 * (xnum / xden));
668 }
else if (x <= 12.0) {
672 for (i = 0; i < 8; i++) {
673 xnum = xnum * xm4 + p4[i];
674 xden = xden * xm4 + q4[i];
677 res = d4 + xm4 * (xnum / xden);
686 for (i = 0; i < 6; i++) {
687 res = res / xsq + c[i];
694 res = res + sqrtpi - 0.5 * corr;
695 res = res + x * (corr - 1.0);
void copyProbability(Probability &)
void setBeta_Parameter(double)
double beta_pdf(double, double, double)
double beta_cdf(double, double, double)
double getFailureRate() const
double getBeta_Parameter()
double beta_cdf_inv(double, double, double)
void setProbability(double)
double beta_inc(double, double, double)
double getAlpha_Parameter()
double calculateProbability()
double beta(double, double)
double calculateSurvivalProbability(double)
void saveProbabilityToFile(std::ofstream &)
void retrieveProbabilityFromFile(std::ifstream &)
void setFailureRate(double failure_rate)
void setAlpha_Parameter(double)
bool log
Enable/disable rank-specific logging.