# File lib/rational.rb, line 438 def gcd(n) m = self.abs n = n.abs return n if m == 0 return m if n == 0 b = 0 while n[0] == 0 && m[0] == 0 b += 1; n >>= 1; m >>= 1 end m >>= 1 while m[0] == 0 n >>= 1 while n[0] == 0 while m != n m, n = n, m if n > m m -= n; m >>= 1 while m[0] == 0 end m << b end