6.5 Applying Integer Functions to Rationals

The set of `mpq` functions is quite small. In particular, there are few functions for either input or output. The following functions give direct access to the numerator and denominator of an `mpq_t`.

Note that if an assignment to the numerator and/or denominator could take an `mpq_t` out of the canonical form described at the start of this chapter (see Rational Number Functions) then `mpq_canonicalize` must be called before any other `mpq` functions are applied to that `mpq_t`.

Macro: `mpz_ptr` mpq_numref `(const mpq_t op)`
Macro: `mpz_ptr` mpq_denref `(const mpq_t op)`

Return a reference to the numerator and denominator of op, respectively. The `mpz` functions can be used on the result of these macros. Such calls may modify the numerator or denominator. However, care should be taken so that op remains in canonical form prior to a possible later call to an `mpq` function.

Function: `void` mpq_get_num `(mpz_t numerator, const mpq_t rational)`
Function: `void` mpq_get_den `(mpz_t denominator, const mpq_t rational)`
Function: `void` mpq_set_num `(mpq_t rational, const mpz_t numerator)`
Function: `void` mpq_set_den `(mpq_t rational, const mpz_t denominator)`

Get or set the numerator or denominator of a rational. These functions are equivalent to calling `mpz_set` with an appropriate `mpq_numref` or `mpq_denref`. Direct use of `mpq_numref` or `mpq_denref` is recommended instead of these functions.