inline T cyl_bessel_j_imp(T v, T x, const bessel_maybe_int_tag&, const Policy& pol) { BOOST_MATH_STD_USING // ADL of std names. int ival = detail::iconv(v, pol); if((abs(ival) < 200) && (0 == v - ival)) { return bessel_jn(ival/*iround(v, pol)*/, x, pol); } return cyl_bessel_j_imp(v, x, bessel_no_int_tag(), pol); }
inline T cyl_bessel_j_imp(T v, T x, const bessel_maybe_int_tag&, const Policy& pol) { BOOST_MATH_STD_USING // ADL of std names. int ival = detail::iconv(v, pol); // If v is an integer, use the integer recursion // method, both that and Steeds method are O(v): if((0 == v - ival)) { return bessel_jn(ival, x, pol); } return cyl_bessel_j_imp(v, x, bessel_no_int_tag(), pol); }
inline T cyl_bessel_j_imp(T v, T x, const bessel_maybe_int_tag&, const Policy& pol) { BOOST_MATH_STD_USING // ADL of std names. typedef typename bessel_asymptotic_tag<T, Policy>::type tag_type; if((fabs(v) < 200) && (floor(v) == v)) { if(fabs(x) > asymptotic_bessel_j_limit<T>(v, tag_type())) return asymptotic_bessel_j_large_x_2(v, x); else return bessel_jn(iround(v, pol), x, pol); } return cyl_bessel_j_imp(v, x, bessel_no_int_tag(), pol); }
inline T cyl_bessel_j_imp(int v, T x, const bessel_int_tag&, const Policy& pol) { BOOST_MATH_STD_USING typedef typename bessel_asymptotic_tag<T, Policy>::type tag_type; if(fabs(x) > asymptotic_bessel_j_limit<T>(abs(v), tag_type())) { T r = asymptotic_bessel_j_large_x_2(static_cast<T>(abs(v)), x); if((v < 0) && (v & 1)) r = -r; return r; } else return bessel_jn(v, x, pol); }