Flowdock
method

# **

v1_8_7_72 - Show latest stable - 0 notes - Class: Rational
`**(other)` public

## No documentation

This method has no description. You can help the Ruby community by adding new notes.

Hide source
```# File lib/mathn.rb, line 126
def ** (other)
if other.kind_of?(Rational)
other2 = other
if self < 0
return Complex.new!(self, 0) ** other
elsif other == 0
return Rational(1,1)
elsif self == 0
return Rational(0,1)
elsif self == 1
return Rational(1,1)
end

npd = numerator.prime_division
dpd = denominator.prime_division
if other < 0
other = -other
npd, dpd = dpd, npd
end

for elm in npd
elm[1] = elm[1] * other
if !elm[1].kind_of?(Integer) and elm[1].denominator != 1
return Float(self) ** other2
end
elm[1] = elm[1].to_i
end

for elm in dpd
elm[1] = elm[1] * other
if !elm[1].kind_of?(Integer) and elm[1].denominator != 1
return Float(self) ** other2
end
elm[1] = elm[1].to_i
end

num = Integer.from_prime_division(npd)
den = Integer.from_prime_division(dpd)

Rational(num,den)

elsif other.kind_of?(Integer)
if other > 0
num = numerator ** other
den = denominator ** other
elsif other < 0
num = denominator ** -other
den = numerator ** -other
elsif other == 0
num = 1
den = 1
end
Rational.new!(num, den)
elsif other.kind_of?(Float)
Float(self) ** other
else
x , y = other.coerce(self)
x ** y
end
end```