mpq_get_int and mpq_get_frac

Kevin Ryde
Sat, 12 Apr 2003 10:00:12 +1000

Michel Bardiaux <> writes:
> I could not find functions to extract the integer and fractional parts
> of an mpq_rat. Am I mistaken? If not, would it be worth adding to the
> library?

Maybe.  We generally encourage direct mpq_numref etc for anything not
already present.

> I am somewhat confused about whether I should take a copy of r1 in
> case res and r1 refer to the same mpq_t (at the call site). Though I
> realize that here, since the denominator of r1 is not used after the
> /*2*/ the code should work even when called as mpq_get_frac(m,
> m). Correct?

Yes, I don't think you need the copy.

You might like to skip the mpz_set if res==r1 too.

Also, I suspect you don't need the canonicalize (and getting rid of it
is a good thing, because it's very slow), since if n and d have no
common factor, then n-q*d and d have no common factor either.  I think
that's right.  Sounds plausible at least :-).

Don't forget to test for the numerator becoming zero though, since in
that case the denominator must be set to 1.  (0/1 being the canonical
form for 0.)