betacf_ function

double betacf_(
  1. num x,
  2. num a,
  3. num b
)

Evaluates the continued fraction for incomplete beta function by modified Lentz's method.

Implementation

double betacf_(num x, num a, num b) {
  const fpmin = 1.0e-30;
  // These q's will be used in factors that occur in the coefficients
  final qab = a + b + 0.0;
  final qap = a + 1.0;
  final qam = a - 1.0;
  var c = 1.0;
  var d = 1.0 - qab * x / qap;
  if (d.abs() < fpmin) {
    d = fpmin;
  }
  d = 1.0 / d;
  var h = d;
  for (var m = 1; m <= 100; m++) {
    final m2 = 2.0 * m;
    var aa = m * (b - m) * x / ((qam + m2) * (a + m2));
    // One step (the even one) of the recurrence
    d = 1.0 + aa * d;
    if (d.abs() < fpmin) {
      d = fpmin;
    }
    c = 1.0 + aa / c;
    if (c.abs() < fpmin) {
      c = fpmin;
    }
    d = 1.0 / d;
    h *= d * c;
    aa = -(a + m) * (qab + m) * x / ((a + m2) * (qap + m2));
    // Next step of the recurrence (the odd one)
    d = 1.0 + aa * d;
    if (d.abs() < fpmin) {
      d = fpmin;
    }
    c = 1.0 + aa / c;
    if (c.abs() < fpmin) {
      c = fpmin;
    }
    d = 1.0 / d;
    final del = d * c;
    h *= del;
    if ((del - 1.0).abs() < 3.0e-7) {
      break;
    }
  }
  return h;
}