code: def log_taylor_cached(x, prec):
      """
      Fixed-point computation of log(x), assuming x in (0.5, 2)
      and prec <= LOG_TAYLOR_PREC.
      """
      n = x >> (prec - LOG_TAYLOR_SHIFT)
      cached_prec = cache_prec_steps[prec]
      dprec = cached_prec - prec
      if (n, cached_prec) in log_taylor_cache:
          a, log_a = log_taylor_cache[n, cached_prec]
      else:
          a = n << (cached_prec - LOG_TAYLOR_SHIFT)
          log_a = log_taylor(a, cached_prec, 8)
          log_taylor_cache[n, cached_prec] = (a, log_a)
      a >>= dprec
      log_a >>= dprec
      u = ((x - a) << prec) // a
      v = (u << prec) // ((MPZ_TWO << prec) + u)
      v2 = (v * v) >> prec
      v4 = (v2 * v2) >> prec
      s0 = v
      s1 = v // 3
      v = (v * v4) >> prec
      k = 5
      while v:
          s0 += v // k
          k += 2
          s1 += v // k
          v = (v * v4) >> prec
          k += 2
      s1 = (s1 * v2) >> prec
      s = (s0 + s1) << 1
      return log_a + s
  
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 25 for calling a global function with example usage: log_taylor_cached(x, prec) and returns: unknown