From c0acb7d60acb3bbd71aadf24d283bc1a3f8390a1 Mon Sep 17 00:00:00 2001 From: Marco Bodrato Date: Thu, 14 Aug 2014 08:54:24 +0200 Subject: mpq/canonicalize.c: Earlier check for negative denominator. --- mpq/canonicalize.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'mpq') 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; } -- cgit v1.2.1