/// <summary> /// Returns a probability based on those given in 3.8 /// </summary> /// <param name="u"></param> /// <param name="eta"></param> /// <returns></returns> private double probability(int u, double eta) { int l; double sum, p; if (u == 0) { p = Math.Exp(-eta); } else { sum = 0.0; for (l = 1; l <= u; l++) { sum += Math.Exp(-eta - u * Math.Log(2) + l * Math.Log(eta) - Cephes.lgam(l + 1) + Cephes.lgam(u) - Cephes.lgam(l) - Cephes.lgam(u - l + 1)); } p = sum; } return(p); }