docs: def precision_and_scale(x):
      """
      From a float, decide what precision and scale are needed to represent it.
  
      >>> precision_and_scale(54.2)
      (3, 1)
      >>> precision_and_scale(9)
      (1, 0)
  
      Thanks to Mark Ransom,
      http://stackoverflow.com/questions/3018758/determine-precision-and-scale-of-particular-number-in-python
      """
      if isinstance(x, Decimal):
          precision = len(x.as_tuple().digits)
          scale = -1 * x.as_tuple().exponent
          if scale < 0:
              precision -= scale
              scale = 0
          return (precision, scale)
      max_digits = 14
      int_part = int(abs(x))
      magnitude = 1 if int_part == 0 else int(math.log10(int_part)) + 1
      if magnitude >= max_digits:
          return (magnitude, 0)
      frac_part = abs(x) - int_part
      multiplier = 10 ** (max_digits - magnitude)
      frac_digits = multiplier + int(multiplier * frac_part + 0.5)
      while frac_digits % 10 == 0:
          frac_digits /= 10
      scale = int(math.log10(frac_digits))
      return (magnitude + scale, scale)