summaryrefslogtreecommitdiff
path: root/mpq
diff options
context:
space:
mode:
authorMarco Bodrato <bodrato@mail.dm.unipi.it>2014-08-14 08:54:24 +0200
committerMarco Bodrato <bodrato@mail.dm.unipi.it>2014-08-14 08:54:24 +0200
commitc0acb7d60acb3bbd71aadf24d283bc1a3f8390a1 (patch)
tree373d6b000e0fcc6a0f9d0a8e34592610ac0c4707 /mpq
parentcb88672fe2d62e54ce174575d09b4fa3e12ba2aa (diff)
downloadgmp-c0acb7d60acb3bbd71aadf24d283bc1a3f8390a1.tar.gz
mpq/canonicalize.c: Earlier check for negative denominator.
Diffstat (limited to 'mpq')
-rw-r--r--mpq/canonicalize.c17
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;
}