### 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_t mpq_numref (const mpq_t op)
Macro: mpz_t 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.

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.