yn function

double yn(
  1. int n,
  2. double x
)

Implementation

double yn(int n, double x) {
  if (x <= 0) return x == 0 ? -double.infinity : double.nan;
  if (n < 0) return (n % 2 == 0 ? 1.0 : -1.0) * yn(-n, x);
  if (n == 0) return y0(x);
  if (n == 1) return y1(x);

  // Forward recurrence is stable for Y_n
  double yPrev = y0(x);
  double yCurr = y1(x);
  for (int k = 1; k < n; k++) {
    double yNext = (2 * k / x) * yCurr - yPrev;
    yPrev = yCurr;
    yCurr = yNext;
  }
  return yCurr;
}