code: def int_pow_fixed(y, n, prec):
      """n-th power of a fixed point number with precision prec
  
      Returns the power in the form man, exp,
      man * 2**exp ~= y**n
      """
      if n == 2:
          return (y * y), 0
      bc = bitcount(y)
      exp = 0
      workprec = 2 * (prec + 4 * bitcount(n) + 4)
      _, pm, pe, pbc = fone
      while 1:
          if n & 1:
              pm = pm * y
              pe = pe + exp
              pbc += bc - 2
              pbc = pbc + bctable[int(pm >> pbc)]
              if pbc > workprec:
                  pm = pm >> (pbc - workprec)
                  pe += pbc - workprec
                  pbc = workprec
              n -= 1
              if not n:
                  break
          y = y * y
          exp = exp + exp
          bc = bc + bc - 2
          bc = bc + bctable[int(y >> bc)]
          if bc > workprec:
              y = y >> (bc - workprec)
              exp += bc - workprec
              bc = workprec
          n = n // 2
      return pm, pe
  
imports: import math
  from bisect import bisect
  from .backend import xrange
  from .backend import MPZ, MPZ_ZERO, MPZ_ONE, MPZ_TWO, MPZ_FIVE, BACKEND
  from .libmpf import round_floor, round_ceiling, round_down, round_up, round_nearest, round_fast, ComplexResult, bitcount, bctable, lshift, rshift, giant_steps, sqrt_fixed, from_int, to_int, from_man_exp, to_fixed, to_float, from_float, from_rational, normalize, fzero, fone, fnone, fhalf, finf, fninf, fnan, mpf_cmp, mpf_sign, mpf_abs, mpf_pos, mpf_neg, mpf_add, mpf_sub, mpf_mul, mpf_div, mpf_shift, mpf_rdiv_int, mpf_pow_int, mpf_sqrt, reciprocal_rnd, negative_rnd, mpf_perturb, isqrt_fast
  from .libintmath import ifib
label_desc: Use image node_id 17 for calling a global function with example usage: int_pow_fixed(y, n, prec) and returns: pm,  pe, unknown,  int