Initializing Rationals (GNU MP 6.3.0)
Description: How to install and use the GNU multiple precision arithmetic library, version 6.3.0.

### 6.1 Initialization and Assignment Functions

Function: `void` mpq_init `(mpq_t x)` ¶

  Initialize x and set it to 0/1. Each variable should normally only be initialized once, or at least cleared out (using the function `mpq_clear`) between each initialization.

Function: `void` mpq_inits `(mpq_t x, ...)` ¶

  Initialize a NULL-terminated list of `mpq_t` variables, and set their values to 0/1.

Function: `void` mpq_clear `(mpq_t x)` ¶

  Free the space occupied by x. Make sure to call this function for all `mpq_t` variables when you are done with them.

Function: `void` mpq_clears `(mpq_t x, ...)` ¶

  Free the space occupied by a NULL-terminated list of `mpq_t` variables.

Function: `void` mpq_set `(mpq_t rop, const mpq_t op)` ¶
Function: `void` mpq_set_z `(mpq_t rop, const mpz_t op)` ¶

  Assign rop from op.

Function: `void` mpq_set_ui `(mpq_t rop, unsigned long int op1, unsigned long int op2)` ¶
Function: `void` mpq_set_si `(mpq_t rop, signed long int op1, unsigned long int op2)` ¶

  Set the value of rop to op1/op2. Note that if op1 and op2 have common factors, rop has to be passed to `mpq_canonicalize` before any operations are performed on rop.

Function: `int` mpq_set_str `(mpq_t rop, const char *str, int base)` ¶

  Set rop from a null-terminated string str in the given base.

  The string can be an integer like “41” or a fraction like “41/152”. The fraction must be in canonical form (see Rational Number Functions), or if not then `mpq_canonicalize` must be called.

  The numerator and optional denominator are parsed the same as in `mpz_set_str` (see Assignment Functions). White space is allowed in the string, and is simply ignored. The base can vary from 2 to 62, or if base is 0 then the leading characters are used: `0x` or `0X` for hex, `0b` or `0B` for binary, `0` for octal, or decimal otherwise. Note that this is done separately for the numerator and denominator, so for instance `0xEF/100` is 239/100, whereas `0xEF/0x100` is 239/256.

  The return value is 0 if the entire string is a valid number, or −1 if not.

Function: `void` mpq_swap `(mpq_t rop1, mpq_t rop2)` ¶

  Swap the values rop1 and rop2 efficiently.