| version 1.1.1.2, 2000/09/09 14:13:02 | version 1.1.1.3, 2003/08/25 16:06:34 | 
|  |  | 
| /* mpq_canonicalize(op) -- Remove common factors of the denominator and | /* mpq_canonicalize(op) -- Remove common factors of the denominator and | 
| numerator in OP. | numerator in OP. | 
|  |  | 
| Copyright (C) 1991, 1994, 1995, 1996 Free Software Foundation, Inc. | Copyright 1991, 1994, 1995, 1996, 2000, 2001 Free Software Foundation, Inc. | 
|  |  | 
| This file is part of the GNU MP Library. | This file is part of the GNU MP Library. | 
|  |  | 
| 
| Line 24  MA 02111-1307, USA. */ |  | 
| Line 24  MA 02111-1307, USA. */ |  | 
| #include "gmp-impl.h" | #include "gmp-impl.h" | 
|  |  | 
| void | void | 
| #if __STDC__ |  | 
| mpq_canonicalize (MP_RAT *op) | mpq_canonicalize (MP_RAT *op) | 
| #else |  | 
| mpq_canonicalize (op) |  | 
| MP_RAT *op; |  | 
| #endif |  | 
| { | { | 
| mpz_t gcd; | mpz_t gcd; | 
| TMP_DECL (marker); | TMP_DECL (marker); | 
|  |  | 
|  | if (op->_mp_den._mp_size == 0) | 
|  | DIVIDE_BY_ZERO; | 
|  |  | 
| TMP_MARK (marker); | TMP_MARK (marker); | 
|  |  | 
| /* ??? Dunno if the 1+ is needed.  */ | /* ??? Dunno if the 1+ is needed.  */ | 
| 
| Line 41  mpq_canonicalize (op) |  | 
| Line 39  mpq_canonicalize (op) |  | 
| ABS (op->_mp_den._mp_size))); | ABS (op->_mp_den._mp_size))); | 
|  |  | 
| mpz_gcd (gcd, &(op->_mp_num), &(op->_mp_den)); | mpz_gcd (gcd, &(op->_mp_num), &(op->_mp_den)); | 
| mpz_divexact (&(op->_mp_num), &(op->_mp_num), gcd); | if (! MPZ_EQUAL_1_P (gcd)) | 
| mpz_divexact (&(op->_mp_den), &(op->_mp_den), gcd); | { | 
|  | mpz_divexact_gcd (&(op->_mp_num), &(op->_mp_num), gcd); | 
|  | mpz_divexact_gcd (&(op->_mp_den), &(op->_mp_den), gcd); | 
|  | } | 
|  |  | 
| if (op->_mp_den._mp_size < 0) | if (op->_mp_den._mp_size < 0) | 
| { | { |