'a ** b
If b is not an integer, the result will be a float or complex
since roots are generally irrational. If b is an integer, the
result will be rational.'

def __pow__(a, b):

    if isinstance(b, numbers.Rational):
        if (b.denominator == 1):
            power = b.numerator
            if (power >= 0):
                return Fraction((a._numerator ** power), (a._denominator ** power))
            else:
                return Fraction((a._denominator ** (- power)), (a._numerator ** (- power)))
        else:
            return (float(a) ** float(b))
    else:
        return (float(a) ** b)
