def **(other)
      raise ArgumentError, 'Cannot raise a temperature to a power' if temperature?
      if other.is_a?(Numeric)
        return inverse if other == -1
        return self if other == 1
        return 1 if other.zero?
      end
      case other
      when Rational
        return power(other.numerator).root(other.denominator)
      when Integer
        return power(other)
      when Float
        return self**other.to_i if other == other.to_i
        valid = (1..9).map { |n| Rational(1, n) }
        raise ArgumentError, 'Not a n-th root (1..9), use 1/n' unless valid.include? other.abs
        return root(Rational(1, other).to_int)
      when Complex
        raise ArgumentError, 'exponentiation of complex numbers is not supported.'
      else
        raise ArgumentError, 'Invalid Exponent'
      end
    end
def **(other)
      raise ArgumentError, 'Cannot raise a temperature to a power' if temperature?
      if other.is_a?(Numeric)
        return inverse if other == -1
        return self if other == 1
        return 1 if other.zero?
      end
      case other
      when Rational
        return power(other.numerator).root(other.denominator)
      when Integer
        return power(other)
      when Float
        return self**other.to_i if other == other.to_i
        valid = (1..9).map { |n| Rational(1, n) }
        raise ArgumentError, 'Not a n-th root (1..9), use 1/n' unless valid.include? other.abs
        return root(Rational(1, other).to_int)
      when Complex
        raise ArgumentError, 'exponentiation of complex numbers is not supported.'
      else
        raise ArgumentError, 'Invalid Exponent'
      end
    end
Exponentiate.  Only takes integer powers.
 Note that anything raised to the power of 0 results in a Unit object with a scalar of 1, and no units.
 Throws an exception if exponent is not an integer.
 Ideally this routine should accept a float for the exponent
 It should then convert the float to a rational and raise the unit by the numerator and root it by the denominator
 but, sadly, floats can't be converted to rationals.

 For now, if a rational is passed in, it will be used, otherwise we are stuck with integers and certain floats < 1
 @param [Numeric] other
 @return [Unit]
 @raise [ArgumentError] when raising a temperature to a power
 @raise [ArgumentError] when n not in the set integers from (1..9)
 @raise [ArgumentError] when attempting to raise to a complex number
 @raise [ArgumentError] when an invalid exponent is passed