diff options
author | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2014-08-14 08:54:24 +0200 |
---|---|---|
committer | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2014-08-14 08:54:24 +0200 |
commit | c0acb7d60acb3bbd71aadf24d283bc1a3f8390a1 (patch) | |
tree | 373d6b000e0fcc6a0f9d0a8e34592610ac0c4707 /mpq | |
parent | cb88672fe2d62e54ce174575d09b4fa3e12ba2aa (diff) | |
download | gmp-c0acb7d60acb3bbd71aadf24d283bc1a3f8390a1.tar.gz |
mpq/canonicalize.c: Earlier check for negative denominator.
Diffstat (limited to 'mpq')
-rw-r--r-- | mpq/canonicalize.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/mpq/canonicalize.c b/mpq/canonicalize.c index 882f408fb..7c8e01b85 100644 --- a/mpq/canonicalize.c +++ b/mpq/canonicalize.c @@ -1,7 +1,7 @@ /* mpq_canonicalize(op) -- Remove common factors of the denominator and numerator in OP. -Copyright 1991, 1994-1996, 2000, 2001, 2005 Free Software Foundation, Inc. +Copyright 1991, 1994-1996, 2000, 2001, 2005, 2014 Free Software Foundation, Inc. This file is part of the GNU MP Library. @@ -38,14 +38,19 @@ mpq_canonicalize (mpq_t op) mpz_t gcd; TMP_DECL; - if (UNLIKELY (SIZ(DEN(op)) == 0)) + if (SIZ(DEN(op)) < 0) + { + SIZ(NUM(op)) = -SIZ(NUM(op)); + SIZ(DEN(op)) = -SIZ(DEN(op)); + } + else if (UNLIKELY (SIZ(DEN(op)) == 0)) DIVIDE_BY_ZERO; TMP_MARK; /* ??? Dunno if the 1+ is needed. */ MPZ_TMP_INIT (gcd, 1 + MAX (ABSIZ(NUM(op)), - ABSIZ(DEN(op)))); + SIZ(DEN(op)))); mpz_gcd (gcd, NUM(op), DEN(op)); if (! MPZ_EQUAL_1_P (gcd)) @@ -53,11 +58,5 @@ mpq_canonicalize (mpq_t op) mpz_divexact_gcd (NUM(op), NUM(op), gcd); mpz_divexact_gcd (DEN(op), DEN(op), gcd); } - - if (SIZ(DEN(op)) < 0) - { - SIZ(NUM(op)) = -SIZ(NUM(op)); - SIZ(DEN(op)) = -SIZ(DEN(op)); - } TMP_FREE; } |