code: def mpc_besseljn(n, z, prec, rounding=round_fast):
      negate = n < 0 and n & 1
      n = abs(n)
      origprec = prec
      zre, zim = z
      mag = max(zre[2] + zre[3], zim[2] + zim[3])
      prec += 20 + n * bitcount(n) + abs(mag)
      if mag < 0:
          prec -= n * mag
      zre = to_fixed(zre, prec)
      zim = to_fixed(zim, prec)
      z2re = (zre**2 - zim**2) >> prec
      z2im = (zre * zim) >> (prec - 1)
      if not n:
          sre = tre = MPZ_ONE << prec
          sim = tim = MPZ_ZERO
      else:
          re, im = complex_int_pow(zre, zim, n)
          sre = tre = (re // ifac(n)) >> ((n - 1) * prec + n)
          sim = tim = (im // ifac(n)) >> ((n - 1) * prec + n)
      k = 1
      while abs(tre) + abs(tim) > 3:
          p = -4 * k * (k + n)
          tre, tim = tre * z2re - tim * z2im, tim * z2re + tre * z2im
          tre = (tre // p) >> prec
          tim = (tim // p) >> prec
          sre += tre
          sim += tim
          k += 1
      if negate:
          sre = -sre
          sim = -sim
      re = from_man_exp(sre, -prec, origprec, rounding)
      im = from_man_exp(sim, -prec, origprec, rounding)
      return (re, im)
  
imports: import operator
  import math
  from .backend import MPZ_ZERO, MPZ_ONE, BACKEND, xrange, exec_
  from .libintmath import gcd
  from .libmpf import ComplexResult, round_fast, round_nearest, negative_rnd, bitcount, to_fixed, from_man_exp, from_int, to_int, from_rational, fzero, fone, fnone, ftwo, finf, fninf, fnan, mpf_sign, mpf_add, mpf_abs, mpf_pos, mpf_cmp, mpf_lt, mpf_le, mpf_gt, mpf_min_max, mpf_perturb, mpf_neg, mpf_shift, mpf_sub, mpf_mul, mpf_div, sqrt_fixed, mpf_sqrt, mpf_rdiv_int, mpf_pow_int, to_rational
  from .libelefun import mpf_pi, mpf_exp, mpf_log, pi_fixed, mpf_cos_sin, mpf_cos, mpf_sin, mpf_sqrt, agm_fixed
  from .libmpc import mpc_one, mpc_sub, mpc_mul_mpf, mpc_mul, mpc_neg, complex_int_pow, mpc_div, mpc_add_mpf, mpc_sub_mpf, mpc_log, mpc_add, mpc_pos, mpc_shift, mpc_is_infnan, mpc_zero, mpc_sqrt, mpc_abs, mpc_mpf_div, mpc_square, mpc_exp
  from .libintmath import ifac
  from .gammazeta import mpf_gamma_int, mpf_euler, euler_fixed
label_desc: Use image node_id 22 for calling a global function with example usage: mpc_besseljn(n, z, prec, rounding) and returns: re,  im