22#if !defined(ISOSPEC_G_FACT_TABLE_SIZE)
27 #if ISOSPEC_BUILDING_OPENMS
28 #define ISOSPEC_G_FACT_TABLE_SIZE 1024
30 #define ISOSPEC_G_FACT_TABLE_SIZE 1024*1024*10
37extern double* g_lfact_table;
39static inline double minuslogFactorial(
int n)
43 #if ISOSPEC_BUILDING_OPENMS
44 if (n >= ISOSPEC_G_FACT_TABLE_SIZE)
47 if (g_lfact_table[n] == 0.0)
48 g_lfact_table[n] = -lgamma(n+1);
50 return g_lfact_table[n];
53const double pi = 3.14159265358979323846264338328;
54const double logpi = 1.144729885849400174143427351353058711647294812915311571513623071472137769884826079783623270275489708;
56double NormalCDFInverse(
double p);
57double NormalCDFInverse(
double p,
double mean,
double stdev);
58double NormalCDF(
double x,
double mean,
double stdev);
59double NormalPDF(
double x,
double mean = 0.0,
double stdev = 1.0);
62double LowerIncompleteGamma2(
int a,
double x);
65double InverseLowerIncompleteGamma2(
int a,
double x);
68inline double InverseChiSquareCDF2(
int k,
double x)
70 return InverseLowerIncompleteGamma2(k, x*tgamma(
static_cast<double>(k)/2.0)) * 2.0;
73extern std::mt19937 random_gen;
74extern std::uniform_real_distribution<double> stdunif;
76inline double rdvariate_beta_1_b(
double b, std::mt19937& rgen = random_gen)
78 return 1.0 - pow(stdunif(rgen), 1.0/b);
82size_t rdvariate_binom(
size_t tries,
double succ_prob, std::mt19937& rgen = random_gen);