diff --git a/Lib/fractions.py b/Lib/fractions.py --- a/Lib/fractions.py +++ b/Lib/fractions.py @@ -450,13 +450,20 @@ """ if isinstance(b, numbers.Rational): if b.denominator == 1: + # Since a normalized fraction to an integer power + # is also a normalized fraction, we can skip the + # GCD computation and build the fraction directly. power = b.numerator if power >= 0: - return Fraction(a._numerator ** power, - a._denominator ** power) + f = Fraction(0, 1) + f._numerator = a._numerator ** power + f._denominator = a._denominator ** power + return f else: - return Fraction(a._denominator ** -power, - a._numerator ** -power) + f = Fraction(0, 1) + f._numerator = a._denominator ** -power + f._denominator = a._numerator ** -power + return f else: # A fractional power will generally produce an # irrational number.