y1 function

double y1(
  1. double x
)

Implementation

double y1(double x) {
  if (x <= 0) return x == 0 ? -double.infinity : double.nan;
  if (x < 8.0) {
    // Use Wronskian: J0*Y1 - J1*Y0 = 2/(pi*x)
    double j0val = j0(x);
    double j1val = j1(x);
    double y0val = y0(x);
    return (2.0 / (M_PI * x) + j1val * y0val) / j0val;
  }
  double theta = x - 3 * M_PI_4;
  return math.sqrt(M_2_PI / x) * math.sin(theta);
}