diff --git a/src/util/rational.h b/src/util/rational.h index c02a5a2c3..0d8a23e81 100644 --- a/src/util/rational.h +++ b/src/util/rational.h @@ -331,22 +331,13 @@ public: return target; } - friend inline rational gcd(rational const & r1, rational const & r2) { - rational result; - m().gcd(r1.m_val, r2.m_val, result.m_val); - return result; - } + friend inline rational gcd(rational const & r1, rational const & r2); // // extended Euclid: // r1*a + r2*b = gcd // - friend inline rational gcd(rational const & r1, rational const & r2, rational & a, rational & b) { - rational result; - m().gcd(r1.m_val, r2.m_val, a.m_val, b.m_val, result.m_val); - return result; - } - + friend inline rational gcd(rational const & r1, rational const & r2, rational & a, rational & b); friend inline rational lcm(rational const & r1, rational const & r2) { rational result; @@ -378,11 +369,7 @@ public: return result; } - friend inline rational abs(rational const & r) { - rational result(r); - m().abs(result.m_val); - return result; - } + friend inline rational abs(rational const & r); rational to_rational() const { return *this; } @@ -446,5 +433,24 @@ inline rational power(rational const & r, unsigned p) { return r.expt(p); } +inline rational abs(rational const & r) { + rational result(r); + rational::m().abs(result.m_val); + return result; +} + +inline rational gcd(rational const & r1, rational const & r2) { + rational result; + rational::m().gcd(r1.m_val, r2.m_val, result.m_val); + return result; +} + +inline rational gcd(rational const & r1, rational const & r2, rational & a, rational & b) { + rational result; + rational::m().gcd(r1.m_val, r2.m_val, a.m_val, b.m_val, result.m_val); + return result; +} + + #endif /* _RATIONAL_H_ */