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.