summaryrefslogtreecommitdiff
path: root/lib/rational.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rational.rb')
-rw-r--r--lib/rational.rb36
1 files changed, 7 insertions, 29 deletions
diff --git a/lib/rational.rb b/lib/rational.rb
index 3f15cfafa8..5220f319f2 100644
--- a/lib/rational.rb
+++ b/lib/rational.rb
@@ -436,36 +436,14 @@ class Integer
# The result is positive, no matter the sign of the arguments.
#
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
-
- def gcd2(int)
- a = self.abs
- b = int.abs
-
- a, b = b, a if a < b
-
- while b != 0
- void, a = a.divmod(b)
- a, b = b, a
+ min = self.abs
+ max = other.abs
+ while min > 0
+ tmp = min
+ min = max % min
+ max = tmp
end
- return a
+ max
end
#