double j0(double arg) { double argsq, n, d; int i; if(arg < 0) arg = -arg; if(arg > 8) { asympt(arg); n = arg - pio4; return sqrt(tpi/arg)*(pzero*cos(n) - qzero*sin(n)); } argsq = arg*arg; for(n=0,d=0,i=8;i>=0;i--) { n = n*argsq + p1[i]; d = d*argsq + q1[i]; } return n/d; }
double y1(double arg) { double xsq, n, d, x; int i; x = arg; if(x <= 0.){ return(-HUGE_VAL); } if(x > 8.){ asympt(x); n = x - 3*pio4; return(sqrt(tpi/x)*(pzero*sin(n) + qzero*cos(n))); } xsq = x*x; for(n=0,d=0,i=9;i>=0;i--){ n = n*xsq + p4[i]; d = d*xsq + q4[i]; } return(x*n/d + tpi*(j1(x)*log(x)-1./x)); }
double j1(double arg) { double xsq, n, d, x; int i; x = arg; if(x < 0.) x = -x; if(x > 8.){ asympt(x); n = x - 3.*pio4; n = sqrt(tpi/x)*(pzero*cos(n) - qzero*sin(n)); if(arg <0.) n = -n; return(n); } xsq = x*x; for(n=0,d=0,i=8;i>=0;i--){ n = n*xsq + p1[i]; d = d*xsq + q1[i]; } return(arg*n/d); }
double y0(double arg) { double argsq, n, d; int i; errno = 0; if(arg <= 0) { errno = EDOM; return(-HUGE_VAL); } if(arg > 8) { asympt(arg); n = arg - pio4; return sqrt(tpi/arg)*(pzero*sin(n) + qzero*cos(n)); } argsq = arg*arg; for(n=0,d=0,i=8;i>=0;i--) { n = n*argsq + p4[i]; d = d*argsq + q4[i]; } return n/d + tpi*j0(arg)*log(arg); }
double y1(double arg) { double xsq, n, d, x; int i; errno = 0; x = arg; if(x <= 0) { errno = EDOM; return -HUGE_VAL; } if(x > 8) { asympt(x); n = x - 3*pio4; return sqrt(tpi/x)*(pzero*sin(n) + qzero*cos(n)); } xsq = x*x; for(n=0,d=0,i=9; i>=0; i--) { n = n*xsq + p4[i]; d = d*xsq + q4[i]; } return x*n/d + tpi*(j1(x)*log(x)-1/x); }