def **(other)
      if other.is_a?(InternalComplex) or other.is_a?(Complex)
        r, theta = polar
        ore = other.real
        oim = other.imag
        nr = Math.exp ore * Math.log(r) - oim * theta
        ntheta = theta * ore + oim * Math.log(r)
        InternalComplex.polar nr, ntheta
      elsif InternalComplex.generic? other
        r, theta = polar
        InternalComplex.polar r ** other, theta * other
      else
        x, y = other.coerce self
        x ** y
      end
    end
def **(other)
      if other.is_a?(InternalComplex) or other.is_a?(Complex)
        r, theta = polar
        ore = other.real
        oim = other.imag
        nr = Math.exp ore * Math.log(r) - oim * theta
        ntheta = theta * ore + oim * Math.log(r)
        InternalComplex.polar nr, ntheta
      elsif InternalComplex.generic? other
        r, theta = polar
        InternalComplex.polar r ** other, theta * other
      else
        x, y = other.coerce self
        x ** y
      end
    end
Complex exponentiation

 @param [Object] Second operand for binary operation.

 @return [InternalComplex] The result

 @private