npy_cdouble cbesj_wrap( double v, npy_cdouble z) { int n = 1; int kode = 1; int nz, ierr; int sign = 1; npy_cdouble cy_j, cy_y, cwork; cy_j.real = NPY_NAN; cy_j.imag = NPY_NAN; cy_y.real = NPY_NAN; cy_y.imag = NPY_NAN; if (v < 0) { v = -v; sign = -1; } F_FUNC(zbesj,ZBESJ)(CADDR(z), &v, &kode, &n, CADDR(cy_j), &nz, &ierr); DO_SFERR("jv:", &cy_j); if (ierr == 2) { /* overflow */ cy_j = cbesj_wrap_e(v, z); cy_j.real *= NPY_INFINITY; cy_j.imag *= NPY_INFINITY; } if (sign == -1) { if (!reflect_jy(&cy_j, v)) { F_FUNC(zbesy,ZBESY)(CADDR(z), &v, &kode, &n, CADDR(cy_y), &nz, CADDR(cwork), &ierr); DO_SFERR("jv(yv):", &cy_y); cy_j = rotate_jy(cy_j, cy_y, v); } } return cy_j; }
double cbesj_wrap_e_real(double v, double z) { npy_cdouble cy, w; if (v != floor(v) && z < 0) { return NPY_NAN; } else { w.real = z; w.imag = 0; cy = cbesj_wrap_e(v, w); return cy.real; } }