Пример #1
0
double MothurFisher::lnbico(double n, double k){
	try {
		return(lnfact(n)-lnfact(k)-lnfact(n-k));
	}catch(exception& e) {
		m->errorOut(e, "MothurFisher", "lnbico");
		exit(1);
	}
}
Пример #2
0
static gdouble wigner (guint l, gint m1, gint m2, gdouble beta)
{
  gdouble ret = 0.;
  gint l_m_m1, l_p_m1, l_m_m2, l_p_m2, m1_m_m2;
  gint k, kmin, kmax;
  gdouble cb2, sb2, a;

  g_assert (ABS (m1) <= ((gint) l));
  g_assert (ABS (m2) <= ((gint) l));

  l_m_m1 = l - m1;
  l_p_m1 = l + m1;
  l_m_m2 = l - m2;
  l_p_m2 = l + m2;
  m1_m_m2 = m1 - m2;

  kmin = MAX (0, -m1_m_m2);
  kmax = MIN (l_m_m1, l_p_m2);

  if (kmin > kmax)
    return ret;

  aran_coefficient_bufferd_require (_lnfact, 2*l);

  a = (lnfact (l_p_m1) + lnfact (l_m_m1) + lnfact (l_p_m2) +
       lnfact (l_m_m2)) * 0.5;

  cb2 = cos (beta * 0.5);
  sb2 = sin (beta * 0.5);

  for (k = kmin; k <= kmax; k++)
    {
      gdouble b = lnfact (k) + lnfact (l_m_m1 - k) + lnfact (l_p_m2 - k) +
        lnfact (m1_m_m2 + k);
      gdouble c = pow (cb2, l_m_m1 + l_p_m2 - 2 * k);
      gdouble d = pow (sb2, m1_m_m2 + 2 * k);

      ret += PHASE (m1_m_m2 + k) * exp (a - b) * c * d;
    }

  return ret;
}
Пример #3
0
double  lnbico(int n, int k) {
	return lnfact(n) - lnfact(k) - lnfact(n-k);
}
Пример #4
0
double  bico(int n, int k) {
	return floor(0.5 + exp(lnfact(n) - lnfact(k) - lnfact(n-k)));
}
Пример #5
0
float_t lnmultinomial::lnmultinomcoef(const count_t *s){
	return lnfact(s[0]+s[1]+s[2]+s[3])-lnfact(s[0])-lnfact(s[1])-lnfact(s[2])-lnfact(s[3]);
}